2013-04-17 53 views
0

我知道下面的代碼中的問題,但不確定解決方案。如何將模板類指針傳遞給同一類

由於模板化參數是MOD,所以在函數'func'中,期望MOD對於calle類和作爲參數傳遞的類指針都是相同的類型。

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

你需要這個

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應該是一個模板類中的模板方法。

相關問題