2

У меня есть шаблон, как:C++ специализация шаблона - специализируется только некоторые методы, с помощью осущий по умолчанию для остальных

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) { ... } 
} 

Как я специализируюсь только на одном из методов в классе шаблонов?

ответ

3

Чтобы исправить это оказывается просто ...

Все, что мне нужно сделать, это определить метод в моем файле .cc:

template <> 
void MyThing<bool>::Write(bool value) { ... } 

А потом объявить его в моем. h файл:

template <> 
void MyThing<bool>::Write(bool value); 

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

+0

Не обязательно быть статическим. Я никогда не знал, что это возможно. – Barry

+0

@Deduplicator - можете ли вы расширить свой комментарий? Явная специализация «видима», будучи объявлена ​​в заголовочном файле, нет? Т.е., если бы я не добавил его в файл заголовка, другой код по ошибке использовал бы поведение по умолчанию. Или вы подразумеваете что-то еще? –

Смежные вопросы