[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
485(1): 2006/12/19(火)20:11 AAS
>>483
enable_if<is_pod<T> >
には、TがPODならtypeメンバがあり、そうでなければtypeメンバがない。
したがって、TがPODでないとき、typename enable_if<is_pod<T> >::typeは
不正な型であり、SFINAE規則によってこの定義が多重定義の考慮から外される。
結果として、TがPODであるときのみ考慮される定義ができたわけだ。
typename enable_if<is_pod<T> >::typeは、このコンパイル時選択の機構のためだけに
使われているので、インタフェースに影響を与えないようにデフォルト値付きの引数になっている。
ポインタを取っているのは簡潔に0で初期化できるようにだろう。
486: 483 2006/12/19(火)21:31 AAS
>>484,485
レス感謝です
おかげさまで理解できました
>>484
こういう風にすればenable_ifなしでいけるんですね
なんとかそのプログラム理解はできても
自分で書けるようになるまでが大変だ・・
とりあえずこれを参考に頑張ってみます
>>485
enable_if< is_pod<T> >::type* =0
ええと、この式の場合だと
組み込み型の場合はtypeメンバが存在するわけですよね
そして組み込み型でない場合はtypeがないから定義自体されない
それだと* =0はなくても大丈夫なんじゃ?と思ったけど
この引数はコンパイル時にifの役割を果たせばよいから省略可能にしたい
省略可能にするには=とデフォルト引数が必要で
typeをtype*にすればどんな場合でも0が代入できる
うーむ、よく考えられてますね
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.028s