gpt4 book ai didi

c++ - 专门化成员函数时出现 "too many template-parameter-lists"错误

转载 作者:可可西里 更新时间:2023-11-01 15:39:21 26 4
gpt4 key购买 nike

我想像这样在模板类中定义一些模板成员方法:

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"

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

最佳答案

请阅读有关如何为模板提供多个参数的 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++ - 专门化成员函数时出现 "too many template-parameter-lists"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3595859/

26 4 0