C++ 模板化类中的模板化方法
我想定义一个模板类C++ 模板化类中的模板化方法,c++,template-specialization,C++,Template Specialization,我想定义一个模板类 CTest<T> CTest 其中一个方法可以返回类型为的对象 CTest<U> CTest T不一定等于U,如下所示: template<typename T> class CTest { // Properties private: T Prop_1; // Methods public: CTest::CTest (T); CTest::~CTest (); template<typena
CTest<T>
CTest
其中一个方法可以返回类型为的对象
CTest<U>
CTest
T不一定等于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;
}
int main () {
CTest<int> Test (1);
auto Test_2 = Test.Method_1<float> (2.0);
return 0;
}
模板
类别测试{
//性质
私人:
T项目1;
//方法
公众:
CTest::CTest(T);
CTest::~CTest();
模板
CTest方法_1(U);
};
模板
CTest::CTest(T_Prop_1){
这->道具1=\u道具1;
}
模板
CTest::~CTest(){
}
模板
CTest CTest::方法1(U\P){
测试结果(P),;
返回结果;
}
实际上,我也尝试过用以下方式定义方法_1:
template<typename T>
template<typename U>
CTest<U> CTest<T>::Method_1 (U _P) {
return CTest<U> (_P);
}
模板
模板
CTest CTest::方法1(U\P){
返回CTest(_P);
}
我尝试按如下方式使用该类:
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;
}
int main () {
CTest<int> Test (1);
auto Test_2 = Test.Method_1<float> (2.0);
return 0;
}
int main(){
CTest试验(1);
自动测试_2=测试方法_1(2.0);
返回0;
}
但我一直遇到编译时错误“无法将函数与现有声明匹配”。提前感谢您的帮助。您的主要问题似乎是类定义中的构造函数和析构函数:这些应该使用额外的限定条件。删除此垃圾会导致代码与我拥有的所有编译器(gcc、clang和EDG)一起编译;对于后者,我需要删除
auto Test 2=
)。下面是我编译的确切代码:
template<typename T>
class CTest {
private:
T Prop_1;
public:
CTest (T);
~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>
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;
}
模板
类别测试{
私人:
T项目1;
公众:
CTest(T);
~CTest();
模板试验方法1(U);
};
模板
CTest::CTest(T_Prop_1){
这->道具1=\u道具1;
}
模板
CTest::~CTest(){
}
模板
模板
CTest CTest::方法1(U\P){
返回CTest(_P);
}
int main(){
CTest试验(1);
自动测试_2=测试方法_1(2.0);
返回0;
}
第二次尝试(template template
)很好,但是类本身有语法错误-CTest::CTest()
无效,应该是CTest()
和dtor。此外,以下划线开头,后跟大写字母的标识符是保留的,您不能使用它们。您使用的某些标识符是保留的,尤其是以下划线(u)开头,后跟大写字母的所有标识符。我不知道这一点。非常感谢,将进行更改。感谢您的编译和试用。