Предположим, что мы имеем следующий шаблон класса:Шаблоны классов и явная специализация функций
template<typename T, size_t m, size_t n>
class Matrix {
/* Implementation/Declaration is probably irrelevant and has been omitted. */
};
Я хочу специализироваться определенную функцию для моего класса шаблона.
template<> template<typename T, size_t m, size_t n>
inline std::wstring Microsoft::VisualStudio:CppUnitTestFramework::ToString(const Matrix<T, m, n> &mtrx) {
/* Definition omitted */
}
(И да, функция Я, специализирующимся реальная функция, которая не должна быть слишком трудно найти.)
Я не вижу причин, почему этот код является неправильным, но Я получаю следующее сообщение (крайне бесполезное) сообщение об ошибке при компиляции (прежде чем спросить, соответствующие файлы были включены):
C2244: 'ToString': unable to match function definition to an existing declaration
поскольку люди неизбежно будут просить об этом, я мог бы также включать прототипы функции I 'm, специализирующийся:
template <typename Q> static std::wstring ToString (const Q& q);
И у меня нет проблем с его специализацией с классами без аргументов шаблона (например, std :: string).
Избавьтесь от 'template <>'. –
Я уже пробовал это. Это не работает. (Точное одно и то же сообщение об ошибке.) – Isaiah
Вы объявили его первым в пространстве имен? –