Получить typedef текущего класса - PullRequest
5 голосов
/ 12 сентября 2010

В настоящее время я использую boost :: intrusive_ptr вместе с моими классами GUI.Хотя это более или менее удобный вопрос, есть ли правильный способ получить имя типа текущего класса?Причина, по которой я спрашиваю, состоит в том, что у меня есть макрос для определения типов различных типов указателей:

#define INTRUSIVE_PTR_TYPEDEFS(CLASSNAME) typedef boost::intrusive_ptr<CLASSNAME> Ptr; \
typedef boost::intrusive_ptr<const CLASSNAME> CPtr; \
typedef CLASSNAME* WeakPtr; \
typedef const CLASSNAME* CWeakPtr;

...

class Widget
{
public:
    INTRUSIVE_PTR_TYPEDEFS(Widget);
    ...
};

class Button : public Widget
{
public:
    INTRUSIVE_PTR_TYPEDEFS(Button);
    ...
};

Было бы гораздо удобнее автоматически выводить CLASSNAME, чтобы вы могли просто копировать nвставьте его в тело класса.Я использую компилятор, поставляемый с Visual Studio 2010.

Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 12 сентября 2010

Нет, это не возможно сделать в C ++.

0 голосов
/ 12 сентября 2010

Хм, одна идея, которая у меня есть, это вызвать конструктор и имя типа для этого указателя ... Другим способом может быть создание метапрограммы шаблона для создания классов, которая также будет выполнять определения типов.

...