Iは、テンプレートクラスを定義したいのいずれかの方法では、TとUと必ずしも等しくないタイプを鋳型方法は
CTest<U>
のオブジェクトを返すことができた
CTest<T>
template<typename T>
class CTest {
// Properties
private:
T Prop_1;
// Methods
public:
CTest::CTest (T);
CTest::~CTest();
template<typename U>
CTest<U> Method_1 (U);
};
template<typename T>
CTest<T>::CTest (T _Prop_1) {
this->Prop_1 = _Prop_1;
}
template<typename T>
CTest<T>::~CTest() {
}
template<typename T, typename U>
CTest<U> CTest<T>::Method_1 (U _P) {
CTest<U> Result (_P);
return Result;
}
実際には、次のようにMethod_1を定義しようとしました。
template<typename T>
template<typename U>
CTest<U> CTest<T>::Method_1 (U _P) {
return CTest<U> (_P);
}
次のように私はクラスを消費しようとした:
int main() {
CTest<int> Test (1);
auto Test_2 = Test.Method_1<float> (2.0);
return 0;
}
をしかし、私はコンパイル時エラーを取得しておく「既存の宣言に機能を一致させることができません。」あなたの助けを前にありがとう。
あなたの第二の試み( 'テンプレートテンプレートは、')良いですが、クラス自体に構文エラーがある - 'CTEST :: CTESTは()'無効であるとすべき同様に 'CTest()'とdtorになります。アンダースコアで始まり大文字で始まる識別子も予約されており、使用することはできません。 –
使用する識別子の一部は予約されています。特に、アンダースコア(_)で始まり、大文字で始まるすべての識別子が予約されています。 –
それを知らなかった。ありがとう、変更を行います。 – Shredderroy