[過去ログ] Boostを語れゴラァ part3 (1001レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
484
(1): 2006/12/19(火)20:09 AAS
>>483
enable_ifやdisable_ifは、関数のオーバーロード解決のルールをトリッキーに使っている。

やりたいことを実現する方法はいくつかある。
たとえばこんな方法。

//false以外、すなわちtrueの場合に呼ばれる
template < bool isPod >
struct Count_impl
{ static void do() {/* 1 */} } ;

//特殊化、falseの時に呼ばれる
template < >
struct Count_impl<false>
{ static void do() {/* 2 */} } ;

template < typename T >
void count(T array[])
{
 Count_impl<boost::is_pod<T>::value>::do() ;
}
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.041s