Как создать функцию шаблона внутри класса? (С++)

Я знаю, что можно создать функцию шаблона:

template<typename T>
void DoSomeThing(T x){}

и можно создать класс шаблона:

template<typename T>
class Object
{
public:
    int x;
};

но возможно ли сделать класс не внутри шаблона, а затем сделать функцию в этом классе шаблоном? То есть:

//I have no idea if this is right, this is just how I think it would look
class Object
{
public:
    template<class T>
    void DoX(){}
};

или что-то в той степени, в которой класс не является частью шаблона, но функция есть?

Ответ 1

Ваша догадка правильная. Единственное, что вы должны помнить, это то, что определение шаблона функции члена (в дополнение к объявлению) должно быть в файле заголовка, а не в cpp, хотя оно не должно быть в самом объявлении класса.

Ответ 2

Смотрите здесь: Шаблоны, методы шаблонов, Шаблоны участников, шаблоны функций участника

class   Vector
{
  int     array[3];

  template <class TVECTOR2> 
  void  eqAdd(TVECTOR2 v2);
};

template <class TVECTOR2>
void    Vector::eqAdd(TVECTOR2 a2)
{
  for (int i(0); i < 3; ++i) array[i] += a2[i];
}

Ответ 3

Да, функции членов шаблона являются совершенно законными и полезными в разных случаях.

Единственное предостережение в том, что функции-члены шаблонов не могут быть виртуальными.