9

當我想定義像這樣的模板類中的一些模板成員方法:「太多的模板參數列表」錯誤專門的成員函數

template <typename T> 
class CallSometing { 
public: 
    void call (T tObj); // 1st 

    template <typename A> 
    void call (T tObj, A aObj); // 2nd 

    template <typename A> 
    template <typename B> 
void call (T tObj, A aObj, B bObj); // 3rd 

}; 


template <typename T> void 
CallSometing<T>::call (T tObj) { 
    std::cout << tObj << ", " << std::endl; 
} 

template <typename T> 
template <typename A> void 
CallSometing<T>::call (T tObj, A aObj) { 
    std::cout << tObj << ", " << aObj << std::endl; 
} 


template <typename T> 
template <typename A> 
template <typename B> void 
CallSometing<T>::call (T tObj, A aObj, B bObj) { 
    std::cout << tObj << ", " << aObj << ", " << bObj << ", " << std::endl; 
} 

但instantializing模板類時,有關於三參數menthod定義的一個錯誤:

CallSometing<int> caller; 

caller.call(12); // OK 
caller.call(12, 13.0); // OK 
caller.call (12, 13.0, std::string("lalala!")); // NOK - complains "error: too many template-parameter-lists" 

請問我在做什麼錯了?爲什麼(2nd)方法可以,但(3rd)會導致編譯時錯誤?

回答

17

請閱讀C++模板教程,瞭解如何爲模板提供多個參數。取而代之的

template<typename A> template<typename B> void f(A a, B b); 

它做的方法是

template<typename A, typename B> void f(A a, B b); 

多模板的條款表示模板多層次(類模板 - >成員模板)。

+1

Aghhhhh +1加快四秒。 :-D – 2010-08-29 17:50:08

+0

@詹姆斯:他不是四秒鐘後,他提前三秒鐘。 ':)' – sbi 2010-08-29 22:44:30