Шаблон Специализация для функции без параметров
Мне нужно специализировать шаблон функции в c++.
template<typename T>
void doStuff<T>() {}
к
template<>
void doStuff<DefinedClass>();
а также
template<>
void doStuff<DefinedClass2>();
Я предполагаю, что это не правильный синтаксис (поскольку он не компилируется). Как я должен это делать?
Кроме того, поскольку у меня не будет неопределенных параметров шаблона в doStuff<DefinedClass>
, можно ли объявить тело в.cpp?
Примечание: doStuff будет использовать T wihtin в своем теле, чтобы объявить переменную.
Ответы
Ответ 1
Основной шаблон не получает вторую пару аргументов шаблона. Просто это:
template <typename T> void doStuff() {}
// ^^^^^^^^^
Только специализации имеют как template <>
спереди, так и <...>
после имени, например:
template <> void doStuff<int>() { }
Ответ 2
Правильный синтаксис для основного шаблона:
template <typename T>
void doStuff() {}
Чтобы определить специализацию, сделайте следующее:
template <>
void doStuff<DefinedClass>() { /* function body here */ }
Ответ 3
Я предполагаю, что это не правильный синтаксис (поскольку он не компилируется). Как я должен это делать? doStuff будет использовать T wihtin в своем теле, чтобы объявить переменную.
template<typename T>
void doStuff()
{
T t = T(); // declare a T type variable
}
можно было бы объявить тело в.cpp?
C++ поддерживает только inclusive mode
, вы не можете его компилировать отдельно, а затем ссылаться позже.
Из комментария, если вы хотите специализироваться на тип int
:
template<>
void doStuff<int>()
{
}