2014-01-02 5 views
1

Можно ли сделать что-то вроде этого:Как создать экземпляр вложенного класса данный экземпляр содержащего класса

class BaseClass 
{ 
public: 
    class NestedClass 
    { 
    }; 
}; 

BaseClass foo; 
foo.NestedClass bar; 

Как получить тип из экземпляра?

+0

Что вы подразумеваете под: 'Я бы хотел, чтобы он работал с несколькими классами, содержащими одно и то же имя вложенного класса' – Brandon

+0

Например, если у меня есть BaseClass2, который содержит NestedClass –

+0

Вопрос обфускации и не показывает реального намерения (цель дизайна) –

ответ

4

Что вам нужно сделать, это следующее:

BaseClass::NestedClass bar; 

Вы не можете избежать с помощью оператора разрешения области действия, но вы можете сделать typedef в виде стенографии в соответствующей области:

typedef BaseCLass::NestedClass NestedClass; 

EDIT: на основе изменения в вопросе, если вы хотели бы тип из экземпляра, в C++ 11 вы можете использовать decltype:

decltype(foo)::NestedClass; 

, но это бессмысленно, как decltype вернется BaseClass в этом случае ,

+0

Вы уверены, что нет другого способа сделать это? –

+0

Довольно точно. Почему вы не хотите разрешения области или typedef? – pippin1289

+0

Просто потому, что он работает на C#, и мне было интересно, возможно ли это на C++. –

0

используется оператор разрешения области наряду с именем базового класса:

BaseClass::NestedClass bar; 
Смежные вопросы