Полагаю, вы можете написать специализацию, чтобы она наследовала от универсальной версии.
Например: предположим, что у вас есть struct foo
с типом и значением (со значением по умолчанию) параметров шаблона;предположим, что у него есть несколько методов (bar()
, в следующем примере)
template <typename, bool = true>
struct foo
{ void bar () {}; };
, и предположим, что вы хотите специализацию для bool
(как тип шаблона) с теми же методами и дополнительным baz()
;вы можете наследовать foo<bool>
от общей версии следующим образом
template <>
struct foo<bool> : public foo<bool, false>
{ void baz () {}; };
Вы можете проверить, что
foo<int> fi;
fi.bar(); // compile
//fi.baz(); // compilation error
foo<bool> fb;
fb.bar(); // compile
fb.baz(); // compile