Есть абстрактный интерфейс
class MyIface;
Есть шаблонный класс
template<typename T>
class TypeHolder;
Я хочу специализировать этот шаблон для указателей на мой интерфейс:
template<>
class TypeHolder<MyIface*>;
template<>
class TypeHolder<MyIface**>;
Надо:
чтобы этот же шаблоны инстанциировались
для всех наследников MyIface.
(я почему-то думал, что они будут работать для всей иерархии, примерно также как вызов функции или перехват у catch)
Пока я смог этого добиться только так: с помощью boost::type_traits сперва оторвал у типа указатель, потом проверил остаток на наследование MyIface и, если да, то заменял на MyIface*. Потом, с помощью static_cast, приводил тип обратно. Но как это все криво, имхо, да и кода много получается.
Есть ли более простой способ инстанцировать шаблон для всей иерархии?