Я пытаюсь найти способ получить базовый класс параметра шаблона.Как получить T * от параметра шаблона T, T & или T *
Рассмотрим следующий класс:
template <class C>
class Foo
{
public:
Foo(){};
~Foo(){};
C* ptr;
};
если C является ссылкой (например Test &), то PTR является тип C & *
Но мне нужно, чтобы получить указатель базовый класс, является ли C ссылкой, указателем или чем-то еще.
- если C является Тест & затем PTR должны быть Test *,
- если C является Test * затем PTR должен быть Test * ,
- если C является Тест затем PTR должен быть Test * и т.д.
Есть в любом случае, чтобы получить «базовый» класс C, так что я могу создать указатель мне нужно?
Что делать, если 'C' является' Test *** 'или' Test [1] [2] '? Или 'Test const *'? –
У меня нет времени, чтобы написать полный ответ, но проверить специализацию частичного шаблона (например, Google) для ссылочных и указательных типов. – tmpearce
Хорошие книги по этой теме: D. Vandevoorde, N.M. Josuttis «C++ templates. Полное руководство» и Alexandrescu «Современный дизайн C++: общие шаблоны программирования и дизайна».Эти книги содержат огромные примеры, подобные этому, и дают представление о методах метапрограммирования шаблонов, таких как черты и стратегии. – parallelgeek