0

我知道以下代码中的问题,但不确定解决方案。

由于模板化参数是 MOD,因此在函数 'func' 中,对于被调用类和作为参数传递的类指针,它期望 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;
}

我该如何解决这个问题?

4

1 回答 1

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应该是模板类中的模板方法。

于 2013-04-17T06:44:39.043 回答