У меня есть метод в базовом классе, которому нужен тип, переданный ему для некоторых операций, связанных с типом (поиск, размер и вызов метода). В настоящее время это выглядит следующим образом:Вывести 'this' тип указателя при вызове из производного класса?
class base
{
template<typename T>
void BindType(T * t); // do something with the type
};
class derived : public base
{
void foo() { do_some_work BindType(this); }
};
class derivedOther : public base
{
void bar() { do_different_work... BindType(this); }
};
Однако, мне интересно, если есть способ получить тип вызывающего абонента без необходимости передать это так, что мой callpoint код становится:
class derived : public base
{
void foo() { BindType(); }
};
без явного этого указателя , Я знаю, что я могу предоставить параметры шаблона явно как BindType<derived>()
, но есть ли способ каким-то образом извлечь тип вызывающего?
Это типичный прецедент для CRTP http://stackoverflow.com/questions/4173254/what-is-the-curiously-recurring-template-pattern-crtp – Vinzenz
использовать 'typeid (* this)' в базовый класс? – davmac
@davmac typeid не дает мне тип, который я могу использовать для ..., например, call sizeof (T) или T :: SomeFunction() - это только дает мне typeid. – Steven