Как специализировать шаблон для иерархии?
От: Basil2 Россия https://starostin.msk.ru
Дата: 04.03.13 12:58
Оценка:
Есть абстрактный интерфейс
class MyIface;

Есть шаблонный класс
template<typename T>
class TypeHolder;

Я хочу специализировать этот шаблон для указателей на мой интерфейс:
template<>
class TypeHolder<MyIface*>;

template<>
class TypeHolder<MyIface**>;

Надо:
чтобы этот же шаблоны инстанциировались для всех наследников MyIface.
(я почему-то думал, что они будут работать для всей иерархии, примерно также как вызов функции или перехват у catch)

Пока я смог этого добиться только так: с помощью boost::type_traits сперва оторвал у типа указатель, потом проверил остаток на наследование MyIface и, если да, то заменял на MyIface*. Потом, с помощью static_cast, приводил тип обратно. Но как это все криво, имхо, да и кода много получается.

Есть ли более простой способ инстанцировать шаблон для всей иерархии?
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.