我知道以下代码中的问题,但不确定解决方案。
由于模板化参数是MOD,在函数'func'中,对于calle类和作为参数传递的类指针,它期望MOD具有相同的类型。
template <class MOD>
class Test {
public:
void func(Test<MOD>* _ptr);
Test(MOD* _m, int _val);
int ival;
private:
MOD* _mod;
};
template <class MOD>
Test<MOD>::Test(MOD* _m, int _val) {
_mod = _m;
ival = _val;
}
template <class MOD>
void Test<MOD>::func(Test<MOD>* _ptr) {
if(ival == _ptr->ival)
std::cout << "Equal values " << std::endl;
else
std::cout << "Unequal values " << std::endl;
}
class T1 {
public:
Test<T1>* _test1;
T1() : _test1(NULL) {
_test1 = new Test<T1>(this, 4);
}
~T1() {
delete _test1; _test1 = NULL;
}
};
class T2 {
public:
public:
Test<T2>* _test2;
T2() : _test2 (NULL) {
_test2 = new Test<T2>(this, 5);
}
~T2() {
delete _test2; _test2 = NULL;
}
};
int main() {
T1 t1;
T2 t2;
t1._test1->func(t2._test2);
return 0;
}
我该如何解决这个问题?
答案 0 :(得分:0)
你需要这个
template <class MOD>
class Test {
public:
template<class T> void func(Test<T>* _ptr);
Test(MOD* _m, int _val);
int ival;
private:
MOD* _mod;
};
template <class MOD>
template <class T>
void Test<MOD>::func(Test<T>* _ptr) {
if(ival == _ptr->ival)
std::cout << "Equal values " << std::endl;
else
std::cout << "Unequal values " << std::endl;
}
func
应该是模板类中的模板方法。