ネストされたテンプレートとテンプレートの特殊化に問題があります。次のクラスを考える:テンプレートを特殊化<typename T、テンプレート<typename> class U>
小さなテンプレートクラス
template<class U>
class T {
public:
T(){}
virtual ~T(){}
};
そして、ネストされたテンプレートのいくつかの種類
template<typename T, template<typename> class U>
class A {
public:
void foo()
{
std::cerr << "A generic foo";
}
};
と小さなmain.cppに
int main(int argc, const char *argv[])
{
A<int,T> *a = new A<int,T>;
a->foo();
//This wont work:
A<double,T*> *b = new A<double,T*>;
b->foo();
return 0;
}
今私が必要Uがポインタの場合の特殊化:
A<double,T*> *b = new A<double,T*>;
b->foo();
これを行うには?私のような何か試してみました:
template<typename T, template<typename> class U>
class A< T, U* >
{
public:
void foo()
{
std::cerr << "A specialized foo";
}
};
をしかしT*
は意味がありませんので、それだけで、何をする抱き合わせていることはできません
A.h:18:16: Error: Templateargument 2 is invalid
あなたは混乱しているようです。 –
@ildjarn:いいえ、それはうまくいきます。なぜなら、 'A'は1つのパラメータを持つテンプレート型のものを期待しているからです。 'T'はその請求書に適合します。 – bitmask
@bitmask:ああ、まったく正しい、私は明らかに注意を払っていなかった。 – ildjarn