加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:09:10 所属栏目:百科 来源:网络整理
导读:我想在模板类中定义一些模板成员方法,如下所示: template typename Tclass CallSometing {public: void call (T tObj); // 1st template typename A void call (T tObj,A aObj); // 2nd template typename A template typename Bvoid call (T tObj,A aObj,B
我想在模板类中定义一些模板成员方法,如下所示:
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);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读