掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
boostのtype_traitsを使ってテンプレートを切り替えたい (ID:68369)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
特殊化しない template と、特殊化した template は別物だから 同じになる必然があるならプログラマがそのように実装しなきゃならんわけで 0.共通部分を別ファイルにくくりだし、一般と特殊化とでその同一ファイルを #include する→既に試したんだよね 1.オーバーロードは出来る→俺が既に挙げた 共通な部分はフツーに実装し、共通でない部分はオーバーロードで実装 2.オーバーライドできる→共通部分を基底クラスにもっていく template<typename T> struct A_common { static void dumpfunc() { std::cout << typeid(T).name() << std::endl; } }; template<typename T, typename enabled=void> struct A : public A_common<T> { typedef A_common<T> base_type; A() { std::cout << "generic A::A is used on "; base_type::dumpfunc(); } }; template<typename T>struct A<T, typename boost::enable_if<boost::is_pod<T> >::type> : public A_common<T> { typedef A_common<T> base_type; A() { std::cout << "pod A::A is used on "; base_type::dumpfunc(); } }; どれでもいいんぢゃないの? 俺でも、考えるのが面倒になったら0で逝く可能性があるよ
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.