C++での,テンプレートの特殊化に関する質問です.
テンプレートの引数が複数あるときの特殊化が良く分かりません.具体的には...
template<typename T1, typename T2>
class Hoge
{
const T1& x_;
const T2& y_;
public:
Hoge(const T1& x, const T2& y)
: x_( x )
, y_( y )
{}
void hoge(){ std::cout << default << std::endl; }
};
のようなテンプレートクラスHogeで,
1. T1のみがintのとき
2. T2のみがintのとき
3. T1とT2ともにintのとき
の3つの場合について,メンバ関数hogeの動作を変えたいのですが,
// 1.の場合
template<typename T2>
void Hoge<int, T2>::hoge(){ std::cout << T1のみint << std::endl; }
//2.の場合
template<typename T1>
void Hoge<T1, int>::hoge(){ std::cout << T2のみint << std::endl; }
//3.の場合
template<>
void Hoge<int, int>::hoge(){ std::cout << T1とT2ともにint << std::endl; }
とやると,うまくいきません.どうすればいいのでしょう?
多分,単なる文法のミスっぽい希ガス.
誰かダメだししてくれませんか?
「Modern C++ Design」からの引用です。
・テンプレート・パラメータを複数指定したテンプレートにおけるメンバ関数群を特殊化
す ることはできません。
例)
template < class T, class U > class Gadget
{
void Fun() { ... }
};
template < class U > void Gadget< char, U >::Fun() {} // 特殊化できない
まさにこれに当たるかと。
あちゃー.まじっすか...
まぁ,不可能だということが分かってよかったです.
他のアプローチを考えます.
DDさん,ありがとうございました.
# 私もModern C++ Designは所有していますが,自分にはまだ難解で,まだそこまで読め
てません.つぅか,7ページにあるよ...orz
これは標準C++の仕様なんですかねぇ.
それとも,今後サポートしたコンパイラは出てくるんでしょうか.