掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
boostのtype_traitsを使ってテンプレートを切り替えたい (ID:68367)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
えーと・・・何がしたいのかよくわからんのだけど template<typename T>struct A { ... }; があるとき、特殊化 template<>struct A<int> { ... }; を行うということは、 ・ A<int> というクラスを作る ・ A<int> と A<generic> は無関係なクラスである というプログラマの意思表明と解釈されることになっているわけで A<int> と A<generic> とで中身がまったく異なるものであってよい。 逆に言えば「そっくり」にしたいのであれば、そういうふうに実装する必然がある。 「そっくり」ではなく「同じ」にしたいのであれば template の特殊化でない方法で実装すればよくて たとえばこんな感じに実装することは不可能ではない template<typename T> struct x_workhorse { x_workhorse(const boost::true_type& ispod) { std::cout << "X::X(POD)\n"; dumptype(); } x_workhorse(const boost::false_type& ispod) { std::cout << "X::X(non-POD)\n"; dumptype(); } void dumptype() const { std::cout << typeid(T).name() << std::endl; } }; template<typename T> struct x : public x_workhorse<T> { x() : x_workhorse<T>(typename boost::is_pod<T>::type()) {} }; int main() { {x<int> x0;} {x<boost::is_pod<int> > x1;} return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.