[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 18:55 / Filesize : 156 KB / Number-of Response : 861
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++0x 5



1 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 23:10:49 ]
The C++ Standards Committee
www.open-std.org/jtc1/sc22/wg21/

wikipedia
ja.wikipedia.org/wiki/C%2B%2B0x

C++0x
pc11.2ch.net/test/read.cgi/tech/1149440647/
C++0x 2
pc11.2ch.net/test/read.cgi/tech/1191842951/
C++0x 3
pc11.2ch.net/test/read.cgi/tech/1204808027/
C++0x 4
pc11.2ch.net/test/read.cgi/tech/1214407525/

321 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:14:40 ]
クラス作る時にコンセプト使って
InputIterator my_iterator{/*...*/};
とかやって要件満たしてなかったらエラー出してくれるみたいな使い方ができればよかったのに

322 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:16:33 ]
表記が違うだけで出来るやん

323 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:27:12 ]
いや、そりゃやろうと思えばできるけどさ
こんな風になるのかな

class my_iterator{/*...*/};

template<InputIterator T> class InputIteratorChecker{};

static_assert(sizeof(InputIteratorChecker<my_iterator>));

めんどくさくね?

324 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:29:53 ]
>>315
主旨だけシンプルに書きましょう。
わめいて逃げてるようにしか見えませんw

325 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:49:16 ]
>>323
Only required,
> requires InputIterator


326 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:02:42 ]
>>325
それでどうやって簡単に書くんだ?
requiresってテンプレートとコンセプトの中でしか使えないだろ

327 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:13:26 ]
my_iteratorは、template<〜> iteratorとは無縁のクラス、
まったく別のsignatureってわけですか?
だったらconcept_map書くしかないですね。

328 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:18:10 ]
めんどくさい誤解招いてるみたいだからInputIteratorやめる

auto concept HasFoo<class T>{
void foo();
};

があるときに

HasFoo Hoge{void foo(){}}; //OK
HasFoo Fuga{}; //NG

とかできたらいいなー、というのが>>321の趣旨

329 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:01:42 ]
fooにT型の関与なしかあ。

auto concept HasFoo<>{
void foo();
};
template<> class Hoge {
void foo();
};
template<> concept_map HasFoo<Hoge> {
void foo() {}
};
〜 Hoge<> 〜

でいいのかなあ。



330 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:14:42 ]
めんどくさいなぁ

やりたいことはただ自作クラスがHasFooコンセプト満たしてるかどうかチェックしたいだけだってのに
チェックするためだけにテンプレート化すんの?
馬鹿げてる

331 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:23:59 ]
これでいいじゃん
template<> class Hoge {
void foo();
requires HasFoo<Hoge>;
};

332 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:23:59 ]
auto concept HasFoo<typename T>{
void foo(T);
};
だと、
template<typename T> class Hoge {
requires HasFoo<T> void foo(T) {}
}
って書けるけど。
template<> class Hoge {
requires HasFoo<> void foo() {}
}
はいけるかどうかわからん。もう一回ドラフト読まんと。


333 名前:332 mailto:sage [2009/02/21(土) 02:26:50 ]
間違えた。
class Hoge {
requires HasFoo<> void foo() {}
}
これは駄目だった。
>>331
ああそだね。

334 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:28:05 ]
>>332
それ以前の問題として

HasFooは簡単なコンセプトだからいいけど
これがもし10個の型名と20個の関数を要求するコンセプトだったら
Hogeの型名と関数全部にそのrequires付けて回る気か?

>>323の方が楽だわ

335 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:31:08 ]
直接こう書ければなんの問題もないのにな
class Hoge {
void foo();
requires HasFoo<Hoge>;
};

336 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:44:18 ]
C++ってほんとに糞言語ですね☆

337 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:45:25 ]
C++がwadlerとかにボロ糞に貶されるところを見てみたい

338 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 03:30:09 ]
class Hoge : public HasFoo<Hoge> {
void foo();
};

こう書かせろよ。めんどくさいな

339 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 03:53:18 ]
>>320
配列で使えんやん



340 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 08:56:53 ]
>>338
class Hoge requires HasFoo {
void foo();
};
ならあり得るかも。

341 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 12:08:31 ]
>>339
concept_map ?

342 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 18:07:11 ]
>>341
concept_mapってsignatureのようなことできる様になるの?
便利やね。
struct A
{
 //・・・
 void Method();
};
struct B
{
 //・・・
 void Method():
};
signature Sig
{
 void Method();
};
Sig array[]={new A(),new B()};//継承関係の無いオブジェクトを代入
array[0].Method();//それぞれ正しいメンバーが呼び出される

343 名前:デフォルトの名無しさん [2009/02/21(土) 20:13:06 ]
↓がg++4なら通るけどVC9などintがint&に変えられなくて駄目といって通らない。
これって自分何か勘違いしてますか?VC9のバグってことはありませんか?

struct MyClass {
int value;
void set_value(int v) { value = v; }
int get_value(void) const { return value; }
};
vector<shared_ptr<MyClass> > v;
...vに適当に要素を入れる...
for_each(v.begin(), v.end(), bind(&MyClass::set_value, _1, bind(&MyClass::get_value, _1))); // 駄目子ちゃん



344 名前:343 mailto:sage [2009/02/21(土) 20:14:24 ]
あ、bindは<functional>のstd::tr1::bind、_1はstd::tr1::placeholders::_1です。

345 名前:343 mailto:sage [2009/02/21(土) 20:21:13 ]
スレ違いな気がしてきた。C++スレへ行きます。すみません。

346 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 15:49:24 ]
さあもう一度アインシュタインでなにか例え話してみれば?

347 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 17:01:38 ]
誰もアインシュタインで例えたことなんて無いと思うが。

348 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 17:47:07 ]
誰かアインシュタインclass作れよ

349 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 18:35:28 ]
__declspec(dllimport) class Einstein * __stdcall BangEinstein(void);
class Einstein *Albert=BangEinstein();



350 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 18:55:22 ]
assert(E==mc2)


351 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 19:19:11 ]
アインシュタインタンジェント

352 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 10:05:15 ]
もう拡張メソッドも組み込んじゃえよ

353 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:54:44 ]
C++に拡張メソッドは色々と面倒で厄介な問題があるから無理

354 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:39:28 ]
もうちょっと説明クレ
抽象的な言い方では判らないよ

355 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:23:27 ]
ヒント:拡張メソッドはメンバ関数もどきを提供するんだから
当然ポインタから->を通して呼ぶこともできるべきだよな、C++的に考えて

ここから思いつく面倒ごとに思いを馳せれば現実的じゃないという結論には簡単にたどり着く

356 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 05:30:40 ]
>>355
テンプレートメンバ関数の特殊化と同じような方法で実装すればいいんじゃね?
あれも新しいメンバ関数をクラスの定義の外で作ってるわけだし。

357 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 10:13:33 ]
なんか演算子余ってないの?
p->>func() を func(p) の糖衣構文として扱うとかそんなんでいいんだが


358 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 10:17:34 ]
>>356
特殊化はシグネチャを変えているわけじゃない。

359 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 15:44:17 ]
>>357
->* とか?
でも (p->*func)() みたいに括弧が必須なのが面倒。



360 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:49:01 ]
>>359
肛門を指してるように見えた俺は逝ったほうがいいんだろうな orz


361 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:02:12 ]
 )*(

362 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:53:49 ]
>>352
拡張メソッドのメリットって何?


363 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 01:13:23 ]
>>361
むしろ梅干し食べてる感じ

364 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 03:35:03 ]
>>356
難しく考えすぎ

普通に第一引数がthisでそれ以外が普通の関数の定義と同じようになるようにすれば良い。
たとえば
class foo {}; // 定義
class foo { int bar(int baz) { return baz; } }; // 拡張メソッド(C#風)
って書いたら
int foo_extended_method_bar(foo* this, int baz) { return baz;}
って書くのと同じようになるようにすればいい。
でも継承したらどうなるかとかは知らん

>>362
使ったこと無いからわかんないなぁ
rubyのサンプルコードで良く見るけど

365 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:00:55 ]
>>364
なにその生産性の低い記述は。


366 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:13:32 ]
あくまで後から擬似的にメンバメソッドを追加できるようにするシンタックスシュガーでしょ。
あんまりいい例じゃないけど、なんでこの行列クラス、固有値求められないんだよ…ってときに:

#include "matrix"
// class Matrix;
#include "eigenvalues"
// vector<double> eigenvalues(const Matrix& this);

Matrix m;
auto es = m.eigenvalues(); // eigenvalues(m); と同等

Matrix* pm;
pm->eigenvalues(); // eigenvalues(*pm);

367 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:11:44 ]
比較的簡単な処理の流れはメソッドチェイン出来ると楽ってだけかと
ただC++だと例外を軽く使えないからエラー処理をどうしようってことでMaybeモナドが欲しくなる

368 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:10:37 ]
>>366
例が悪すぎます

369 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:45:38 ]
>>366
Matrixをテンプレートの型パラメータで渡したときなんか拡張メソッドの定義includeの読み込み順で拡張メソッドが適用されたりされなかったりするのかな



370 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:11:17 ]
oven(egg)のpipableは拡張メソッドっぽい

371 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:56:06 ]
ソースが短くなるだけで、生産性の低い、動きがトロい、そんなバイナリーができそうだな。
現状のSTLも遅いし。

372 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:06:19 ]
拡張メソッドの解決は動的ポリモルしなければコンパイル時に行うことができるんでそうとも言いきれない

373 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 22:40:52 ]
第一引数を前に出す、単なる糖衣構文だから、バイナリが遅くなるなんてことはないわ

374 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:12:40 ]
C++だとただの糖衣じゃ済まないから注意しないとオーバーヘッドはかかるな

375 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:15:33 ]
operator.ぐらいの糖衣

376 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:47:58 ]
generic functionがあるのに必要ですかね。

377 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:09:52 ]
>>372
それが問題なんでねぇかい

テンプレートメンバ関数はその辺上手く逃げたよなぁ

378 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 05:05:59 ]
普通のオーバーロード解決でなんか問題あるんか。

379 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 11:52:07 ]
>>378
kwsk



380 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:18:24 ]
objがfuncメソッドを持ってなくて、スコープにfunc拡張関数がある場合、
obj.func(args) を func(obj, args) と字面上同義みなすってことでは?

381 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:20:17 ]
generic functionがあるのに必要ですかね。


382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:35:21 ]
必要です。目的が違います。

383 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:39:08 ]
ほとんど変らないんじゃない?
virtualにならないんだし。

384 名前:デフォルトの名無しさん [2009/02/26(木) 13:44:28 ]
generic functionて何。

385 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 18:48:11 ]
あるオブジェクトに対して行う処理を
まずオブジェクト名から入力できるとインテリセンスとかで楽できるんだよね
候補が狭まるから

386 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 20:08:43 ]
あほくさ

387 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:52:27 ]
今時インテリセンスも使いこなせない奴がいるのか・・・

388 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:56:03 ]
0xの次で多重ディスパッチが入れば一緒に入るんじゃないかい>拡張メソッド

389 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:18:24 ]
汎関数の多重ディスパッチは既にある。



390 名前:デフォルトの名無しさん [2009/03/15(日) 11:12:39 ]
おっぱいを大きく見せたくて多重ブラジャーする美少女中学生

391 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 12:53:17 ]
久々に上がってるんで見に来てみたら…

この前、時間が作れたんでようやくmailing2009-02を少し読めた。
久々の単独署名のDouglas Gregorの"Concepts and Ref-qualifiers"、
いやーやはりRvalue Referencesは難しいですね。

それからDouglas GregorってAppleに就職したんだな。(2008/10)
古くはIOKit、今はWebKitとC++結構使ってるからな。


392 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:36:14 ]
0xって本当に0xに出せるの?

393 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:46:12 ]
残念ながら1xがほぼ決定

394 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:47:12 ]
でも未完成のまま強引に0xに出しそうな気もする
やめてほしいけど

395 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 15:50:09 ]
ISOの手続きのスケジュールの都合で無理なのでは?
それがなかったとしても十分09に間に合いそうもないが。

396 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:03:26 ]
もう出しても意味ネーよ。

397 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 16:24:56 ]
>>391
auto concept HasAssign<typename T, typename U> {
typename result_type;
result_type T::operator=(U) &; // ←Rvalue reference!
}
ワロス

398 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 18:27:34 ]
>>395 そうきいている

399 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:34:43 ]
autoっぽいものを現行のC++で実現するマクロってあったような気がするんですがマクロ名を知りませんか



400 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 21:56:24 ]
BOOST_AUTOのこと?

401 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 22:44:53 ]
gccのtypeofかなぁ?


402 名前:デフォルトの名無しさん [2009/03/21(土) 14:58:40 ]
僕は言語仕様の問題のほか、現実的な理解者とコンパイラがいつ現れるかも
気になる。現行のSTLやBoostですらコンパイルエラー、ワーニングが長すぎて
解読困難なのに、これ以上になるのかと思うと気が重くなる。

403 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:59:11 ]
しまった・・・sage忘れた・・・

404 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:03:06 ]
C++0xのconceptにはエラーメッセージを簡易にする目的もあります。

405 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:03:38 ]
俺を含む凡人以下からすれば
「まずはまともな処理系を出してくれ、話はそれからだ」
だからな
WGにいる仕様書だけでコードを書いてあーだこーだ議論してる奴等は化け物に思えてくる

406 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:06:55 ]
>>404
一般的な開発者がその恩恵を受けられるのは、
どんなに早くても2012年頃かと思われますw

407 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 15:12:33 ]
concept については厳しいだろうけど他の機能についてはちょこちょこ実装されつつあるじゃん。

408 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:13:32 ]
可変長テンプレートとか右辺値参照とかばっかり先行してて
可読性を良くする機能はことごとく後回しにされてるけどな

409 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:16:56 ]
可変長テンプレートはありがたいだろ。
TEMPL1(X)
TEMPL2(X1, X2)
TEMPL3(X2, X2, X3)

TEMPL20(X1, X2, X3 .. X20)
とかもうイヤだよ。





410 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:24:11 ]
そりゃそうだけど、ソースが読みやすくなる訳じゃないじゃん
エラーメッセージは多分もっとわかりにくくなるだろうし

411 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 17:27:25 ]
可変長テンプレートが「可読性を良くする機能」ではないとすると、
後回しにされてる機能って何のこと言ってるの?

412 名前:409 mailto:sage [2009/03/21(土) 17:29:11 ]
>>410
そりゃまあ一般論としてはそうかな。
ただ俺は馬鹿だからか、機械生成しなかったのが悪いのか、
5引数のやつだけ書き間違えて大填まりしたことあるわ。
気づくわけないっての

413 名前:デフォルトの名無しさん [2009/03/25(水) 03:24:35 ]
www.open-std.org/jtc1/sc22/wg21/
News 2009-03-24: The 2009-03 post-Summit mailing is available
News 2009-03-24: The C++ Standard Core Language Issues List (Revision 62) is available
News 2009-03-24: The C++ Standard Library Issues List (Revision 63) is available


414 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:21:54 ]
というわけで最新のWorking DraftはN2857ですか。


415 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:44:11 ]
あんまり面白くねーな
ラムダ関係がボロボロで全面書き直しって事くらいか
あと日本からのコメントrejectされまくり

416 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:07:56 ]
結局ラムダ式って Monomorphic なやつだけしか入らんの?
型名書くのだりーよ…
結局 Boost.Lambda のほうが便利じゃんってオチ?

417 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 05:20:03 ]
>>416
何言ってるのかわからん。 Boost.Lambda のどんな用法のことを言ってるの?
C++0x のラムダ式で置きかえらない用法があるってことなんだよね?

418 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:58:21 ]
>417
単に引数の型書くのが面倒という話では?
_1 + 1
[] (int n) { return n + 1; }

もともともラムダ式の提案では引数の型を指定しないでよいものも込みだったんだけど、
分割して型を指定するものだけ先に持ってきたのが Monomorphic なラムダ式のはず。

419 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 09:13:54 ]
[] (auto x) { (ry }とか[] (x) { (ry }とかでできないのかな?



420 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:06:48 ]
>>417
Boost.Lambda は多相じゃん。
(_1 + _2)(1, 1) // -> int 2
(_1 + _2)(1.0, 1.0) // -> double 2.0
単相にして保持したければ
 function<double(double, double)> f = (_1 + _2);
f(1, 1) // double 2.0
とかもできるし。

ちょっと調べてみたら n2529 で、
 (n2329 にあるように higher implementation cost なんで)
 "We do not propose generic lambda functions for C++0x."
って書いてあるな… これはダメっぽい。

421 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 12:35:25 ]
range based algorithmの採用も却下されたことだし
まだまだboostの役目は終わらないということだな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<156KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef