テンプレートクラスのメンバ関数を特殊化 – プログラミング – Home

テンプレートクラスのメンバ関数を特殊化
 
通知
すべてクリア

[解決済] テンプレートクラスのメンバ関数を特殊化


筋肉先生
 筋肉先生
(@筋肉先生)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

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; }

とやると,うまくいきません.どうすればいいのでしょう?
多分,単なる文法のミスっぽい希ガス.
誰かダメだししてくれませんか?


引用未解決
トピックタグ
DD.
 DD.
(@DD.)
ゲスト
結合: 19年前
投稿: 10
 

「Modern C++ Design」からの引用です。
・テンプレート・パラメータを複数指定したテンプレートにおけるメンバ関数群を特殊化
す ることはできません。

例)
template < class T, class U > class Gadget
{
void Fun() { ... }
};
template < class U > void Gadget< char, U >::Fun() {} // 特殊化できない

まさにこれに当たるかと。


返信引用
筋肉先生
 筋肉先生
(@筋肉先生)
ゲスト
結合: 19年前
投稿: 7
Topic starter  

あちゃー.まじっすか...

まぁ,不可能だということが分かってよかったです.
他のアプローチを考えます.
DDさん,ありがとうございました.

# 私もModern C++ Designは所有していますが,自分にはまだ難解で,まだそこまで読め
てません.つぅか,7ページにあるよ...orz

これは標準C++の仕様なんですかねぇ.
それとも,今後サポートしたコンパイラは出てくるんでしょうか.


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました