Если у меня есть класс шаблона MyClass<T>
и если я явно экземпляр для int
и float
(в cpp
файле), то я могу использовать extern template class MyClass<int>
и extern template class MyClass<float>
, чтобы предотвратить единицу компиляции встречая это класса от его экземпляра для int
и float
без необходимости. Конечно, для любого другого типа класс все равно будет создан.предотвратить все экземпляры одного класса шаблона - в том числе поддерживаемых типов
Теперь у меня есть класс MyClass2<T>
, который работает только с int
, float
, char
, double
, short
и их беззнаковыми вариантами где это применимо. Поскольку я знаю все типы заранее, определения всех методов в этом классе находятся в файле cpp
. Это также явным образом создаю экземпляр MyClass2<T>
для всех вышеупомянутых типов. В заголовке у меня есть static_assert
, препятствующий пользователю создавать MyClass2<T>
с неподдерживаемым типом.
Есть ли способ, чтобы полностью предотвратить MyClass2<T>
от инстанцирования (например extern template class MyClass2;
, хотя я знаю, что не работает) для всех типов включая поддерживаемые типы? Как уловить все за extern template
? Я хочу избежать ввода extern template class MyClass2<int>
для всех поддерживаемых типов.
Учитывая, что я уже явно создавал экземпляр класса для этих типов, он кажется не только избыточным, но и для больших проектов (например, тот, над которым я работаю) еще несколько строк, которые мне нужно поддерживать каждый раз при добавлении нового типа ,
Какой компилятор? – Surt
Наш код - это кросс-платформа, поэтому 'MSVC++ 2010-2013',' CLang в XCode 6' и 'GCC'. – Samaursa