c – 专门化成员函数时,“太多的template-parameter-lists”错误

前端之家收集整理的这篇文章主要介绍了c – 专门化成员函数时,“太多的template-parameter-lists”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在模板类中定义一些模板成员方法,如下所示:
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,B bObj) {
    std::cout << tObj << "," << aObj << "," << bObj << "," << std::endl;
}@H_301_3@ 
 

但是当实例化模板类时,有三个参数的方法定义有一个错误

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"@H_301_3@ 
 

你能指出我做错了什么吗?为什么(2nd)方法可以,但是(3rd)会导致编译时错误

解决方法

请阅读关于如何给模板多个参数的C模板教程.代替
template<typename A> template<typename B> void f(A a,B b);@H_301_3@ 
 

它的做法是

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

多个模板子句表示多层次的模板(类模板 – >成员模板).

猜你在找的C&C++相关文章