2012-05-24 1 views
2

В C++ я могу определить класс внутри другого класса, объявляет функции-члены. Позже, когда я определяю определение для этих объявлений, есть ли способ не продолжать повторять содержащийся класс. Например, мой заголовок может выглядеть следующим образом:При определении методов для встроенного класса существует ли способ избежать повторения содержащего класса?

class Outer { 
    class Inner { 
    void one(); 
    void two(); 
    void three(); 
    }; 
}; 

А потом, мои определения могут выглядеть следующим образом:

void Outer::Inner::one() { ... } 
void Outer::Inner::two() { ... } 
void Outer::Inner::three() { ... } 

Есть ли какой-нибудь способ Внешние может быть опущены без определения в точке заявление, возможно, за счет использования пространств имен, чтобы стать:

void Inner::one() { ... } 
void Inner::two() { ... } 
void Inner::three() { ... } 
+0

Вы пробовали использовать 'typedef'? Это работает? –

ответ

3

Я не пробовал (не компилятор здесь) специально, но рискну предположить, что, если вы работаете с внутренним сл жопа, как :: итератор, вы могли бы, вероятно:

using outerclass::innerclass; 

, а затем сделать:

innerclass::foo() { /* def */ } 

предполагая, что не является глобальным с тем же именем, что и внутренний класс в рамках внешнего класса в ,

Кроме того, вы можете определенно использовать макрос и, возможно, использовать typedef (не уверен, но стоит попробовать).

Я бы сказал, что все это делает ваш код менее читаемым, и это плохая идея, хотя независимо от того, как вы ее обходите.