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

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

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)会导致编译时错误

解决方法

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

它的做法是

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

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

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...