9

Я хотел бы определить некоторые методы члена шаблона внутри шаблон класса как так:ошибка «слишком много шаблонов параметров-списки», когда, специализирующаяся функция члена

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

Но когда instantializing класса шаблона, есть ошибка в отношении определения трех аргументов 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-й) вызывает ошибку времени компиляции?

ответ

17

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

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

так, как это делается,

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

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

+1

Aghhhhh, +1 за 4 секунды быстрее. :-D –

+0

@ Джеймс: Он не был через четыре секунды, он был на три секунды раньше. ':)' – sbi

Смежные вопросы