C++ шаблонная специализация - специализируйте только некоторые методы, используя по умолчанию impl для остальных
У меня есть шаблон, как:
template <typename T>
class MyThing {
public:
static void Write(T value) { ... }
static void Flush() { ... }
}
Для определенного типа, например bool
Я хочу специализироваться на Write
метод без изменения других методов. Что-то вроде этого...
// Specialize Write() behavior for <bool> ...
// This won't work. Mything<bool> no longer has a Flush() method!
template <>
class MyThing<bool> {
public:
static void Write(bool value) { ... }
}
Как мне специализировать только один из методов в шаблонном классе?
1 ответ
Решение
Исправление для этого оказывается простым...
Все, что мне нужно сделать, это определить метод в моем файле.cc:
template <>
void MyThing<bool>::Write(bool value) { ... }
А затем объявите это в моем.h файле:
template <>
void MyThing<bool>::Write(bool value);
Мне потребовалось некоторое время, чтобы понять это, поэтому я решил опубликовать это.