Ich habe versucht, eine Vorlagenklasse (Test2
) zu erstellen, die 2 Vorlagenargumente benötigt, Type1
und Type2
. Es ist bekannt, dass das zweite Argument auch eine Vorlagenklasse wäre, die 2 Vorlagenargumente (TypeA
und TypeB
) benötigt.Absurde Fehler bei der Verwendung von Vorlagenvorlagenargumenten
Nun, für ein Objekt von Test2
konstruieren, mag ich den Benutzer in der Lage sein, entweder von zwei Arten von Konstrukteuren zu verwenden:
- Eine, die Objekte von
Type1
undType2
nimmt. - Eine, die Objekte von
Type1
,TypeA
undTypeB
übernimmt.
Ich schrieb den folgenden Code:
#include <iostream>
template<class TypeA, class TypeB>
struct Test
{
TypeA t1obj;
TypeB t2obj;
Test(const TypeA& t1, const TypeB& t2)
: t1obj(t1), t2obj(t2) {std::cout<<"Test::Type1, Type2\n";}
};
template<class Type1,
template<typename TypeX, typename TypeY> class Type2 >
struct Test2
{
Type1 t1obj;
Type2<typename TypeX, typename TypeY> t2obj; //Line 17
Test2(const Type1& t1,
const Type2<typename TypeX, typename TypeY>& t2) //Line 20
: t1obj(t1), t2obj(t2) { std::cout<<"Test2::Type1, Type2\n";}
Test2(const Type1& t1,
const TypeX& x,
const TypeY& y)
: t1obj(t1), t2obj(x,y) { std::cout<<"Test2::Type1, X, Y\n";}
};
int main()
{
Test<int, char> obj1(1,'a');
Test2<int, Test<int, char> > strangeobj1(10,obj1);
Test2<int, Test<int, char> > strangeobj2(1,2,'b');
}
Ich habe viel versucht, aber ich wirklich absurd Fehler wie:
wrong number of template arguments (1, should be 2)
auf der Linie 17 und 20.
Stellen Sie sicher, dass Sie die _first_Fehlermeldung posten. Der Rest könnte gefälscht sein. Und bitte geben Sie die Zeile im Code an. – sbi
@sbi: Der Fehler, den ich erwähnte, ist der erste Fehler, den ich bekomme. –
Das war nicht klar aus Ihrer Beschreibung, also dachte ich, ich würde es erwähnen. – sbi