Ответ 1
Ваша догадка правильная. Единственное, что вы должны помнить, это то, что определение шаблона функции члена (в дополнение к объявлению) должно быть в файле заголовка, а не в cpp, хотя оно не должно быть в самом объявлении класса.
Я знаю, что можно создать функцию шаблона:
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(){}
};
или что-то в той степени, в которой класс не является частью шаблона, но функция есть?
Ваша догадка правильная. Единственное, что вы должны помнить, это то, что определение шаблона функции члена (в дополнение к объявлению) должно быть в файле заголовка, а не в cpp, хотя оно не должно быть в самом объявлении класса.
Смотрите здесь: Шаблоны, методы шаблонов, Шаблоны участников, шаблоны функций участника
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];
}
Да, функции членов шаблона являются совершенно законными и полезными в разных случаях.
Единственное предостережение в том, что функции-члены шаблонов не могут быть виртуальными.