テンプレートタグ:私は、次のコードに私の混乱を凝縮させるために管理している困惑
template<typename T>
class BTI {
public:
char func(char);
};
template<int i>
class Tag {};
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
これはに意図されています
- はテンプレートクラス
BTI
を宣言し、 - を宣言しますテンプレート化されたタグクラス
Tag
および func
のテンプレートに特化した実装を提供します。BTI
のテンプレートパラメータはTag<i>
です。
私はg++ -fsyntax-only
を介してこれを実行して、私が取得(G ++ 4.1.2を使用。):
test.cc:11: error: invalid use of undefined type ‘class BTI<Tag<i> >’
test.cc:2: error: declaration of ‘class BTI<Tag<i> >’
test.cc:11: error: template definition of non-template ‘unsigned char BTI<Tag<i> >::func(char)’
私はこの時点で試して何をしてもわかりません。何か案は?
しかしBTIはテンプレート化されていないので、それはTをまったく使用しません。また、特殊化によって、charではなくunsigned charが返されます。 – vulkanino
funcはテンプレート関数ではないため、特殊化することはできません。私はあなたがクラス全体を専門化しなければならないかもしれないと思うかもしれないし、あるいはfuncをフリースタンディングヘルパー(テンプレート)関数にするかもしれないと思う。私は遊びを持っていきます... – BoBTFish
'' func'が関数テンプレートであっても、* B * BTFTFishに加えられた*部分的な*特殊化を試みるため*まだ*特殊化できません。テンプレート(クラステンプレートに反する)。 –