Подтвердить что ты не робот

Шаблон С++ - несколько типов

рассмотрим следующий класс шаблонов.

template <class T>
class MyClass
{
   void MyFunc();
}

template <class T>
void MyClass<T>::MyFunc()
{
  //...implementation goes here
}

Мне нужно добавить еще одну функцию MyFunc2, которая принимает дополнительный шаблон arg T2 iee

template <class T>
class MyClass
{
   void MyFunc();

   template <class T2>
   static void MyFunc2(T2* data);
}

template <class T>
void MyClass<T>::MyFunc()
{
  //...implementation goes here
}

template <class T, class T2>
void MyClass<T>::MyFunc2(T2* pData)
{
  //...implementation goes here
}

Я использую компилятор VS 2008. Я получаю сообщение об ошибке

error C2244: unable to match function definition to an existing declaration

Как должно выглядеть определение функций и декларация в этом случае.

4b9b3361

Ответ 1

template <class T>
template <class T2> 
void MyClass<T>::MyFunc2(T2* pData) 
{ 
  //...implementation goes here 
}

ИЗМЕНИТЬ 2:

$14.5.2/1 - "Шаблон может быть объявлен в классе или классе шаблон; такой шаблон называется шаблон участника. Шаблон участника может быть определена внутри или вне его класса определение или шаблон класса определение. Шаблон участника шаблон класса, который определяется за пределами определения его класса указывать с помощью шаблонные параметры класса шаблон, за которым следует шаблон-параметры члена шаблон."

Ответ 2

Что вы делаете, хорошо, попробуйте это:

template <typename S,typename T>
struct Structure
{
  S s ;
  T t ;

} ;

int main(int argc, const char * argv[])
{
  Structure<int,double> ss ;
  ss.s = 200 ;
  ss.t = 5.4 ;

  return 1;
}

Этот код работает. Если вы получаете странные ошибки, посмотрите, объявили ли вы объявленный Structure только один параметр шаблона (это то, что я делал).