专门化成员函数时出现“模板参数列表太多”错误

时间:2010-08-29 17:44:41

标签: c++ templates compiler-errors arguments template-meta-programming

我想在模板类中定义一些模板成员方法,如下所示:

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;
}

但是当实例化模板类时,有关三参数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"

你能指出我做错了什么吗?为什么(第二个)方法没问题但是(第三个)会导致编译时错误?

1 个答案:

答案 0 :(得分:21)

请阅读有关如何为模板提供多个参数的C ++模板教程。而不是

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

完成的方式是

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

多个模板子句代表多个级别的模板(类模板 - &gt;成员模板)。