I would like to define some template member methods inside a template class like so:
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; } But when instantializing the template class, there is an error concerning the three-argument menthod definition:
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" Could you please point what I am doing wrong? Why the (2nd) method is OK but the (3rd) causes a compile time error?
1 Answer
Please read a C++ template tutorial on how to give a template multiple parameters. Instead of
template<typename A> template<typename B> void f(A a, B b); The way it is done is
template<typename A, typename B> void f(A a, B b); Multiple template clauses represent multiple levels of templates (class template -> member template).
0