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);

Мне потребовалось некоторое время, чтобы понять это, поэтому я решил опубликовать это.

Другие вопросы по тегам