«Слишком много списков параметров шаблона» ошибка при специализации функции-члена

Я хотел бы определить некоторые методы-члены шаблона внутри класса шаблона следующим образом:

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

Но при создании экземпляра класса шаблона возникает ошибка, связанная с определением метода с тремя аргументами:

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-й) вызывает ошибку во время компиляции?

10
задан Jonathan Mee 28 October 2015 в 18:38
поделиться

1 ответ

Пожалуйста, прочтите руководство по шаблонам C++ о том, как задать шаблону несколько параметров. Вместо

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

Это делается следующим образом:

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

Несколько предложений шаблона представляют несколько уровней шаблонов (шаблон класса -> шаблон члена).

22
ответ дан 3 December 2019 в 17:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: