Я хотел бы определить шаблонный классшаблонные методы в шаблонном классе
CTest<T>
, в котором один из методов может возвращать объект типа
CTest<U>
с Т не обязательно равен U следующим образом:
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