Ich habe ein Problem mit verschachtelten Vorlagen und ihre Vorlage Spezialisierung. Angesichts der folgenden Klassen:spezialisieren Vorlage <Typname T, Vorlage <typename> Klasse U>
Eine kleine Template-Klasse
template<class U>
class T {
public:
T(){}
virtual ~T(){}
};
Und eine Art von verschachtelten Vorlage
template<typename T, template<typename> class U>
class A {
public:
void foo()
{
std::cerr << "A generic foo";
}
};
Und eine kleine 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;
}
Jetzt brauche ich ein Spezialisierung, wenn U ein Zeiger ist:
A<double,T*> *b = new A<double,T*>;
b->foo();
Wie erreichen? Ich habe versucht, so etwas wie:
template<typename T, template<typename> class U>
class A< T, U* >
{
public:
void foo()
{
std::cerr << "A specialized foo";
}
};
Aber es löst nur in
A.h:18:16: Error: Templateargument 2 is invalid
Sie scheinen verwirrt zu sein. –
@ildjarn: Nein, das ist in Ordnung, weil 'A' etwas erwartet, das ein Schablonentyp mit einem Parameter ist. 'T' passt zu dieser Rechnung. – bitmask
@bitmask: Ah, völlig richtig, ich habe anscheinend nicht aufgepasst. – ildjarn