Pergunta

Existe uma maneira mais sucinto para definir uma classe em um namespace do que isso:

namespace ns { class A {}; }

Eu estava esperando algo como class ns::A {}; iria funcionar, mas infelizmente não.

Foi útil?

Solução

Você está perto, você pode declarar frente a classe no namespace e, em seguida, defini-lo fora se você quiser:

namespace ns {
    class A; // just tell the compiler to expect a class def
}

class ns::A {
    // define here
};

O que você não pode fazer é definir a classe no namespace sem membros e, em seguida, definir a classe novamente fora do namespace. Que viola a regra de uma definição (ou absurdo somesuch).

Outras dicas

Você pode fazer isso, mas realmente não é mais sucinto.

namespace ns {
    class A;
}

class ns::A {
};

ou

namespace ns {
    class B;
}

using ns::B;
class B {
};

A seção você deveria ser leitura é a seguinte:

7.3.1.2 definições de membro Namespace

3 Cada nome declarado pela primeira vez em um espaço de nomes é um membro desse namespace. [...]

Observe o prazo - declaração tão D.Shawley (e seu exemplo) está correta.

Não, não pode. Para citar o padrão C ++, seção 3.3.5:

Um nome declarado fora todos nomeados ou namespaces sem nome (7,3), blocos (6,3), divertido (8.3.5), função definições (8.4) e classes (cláusula 9) tem escopo namespace global

Assim, a declaração deve ser dentro de um bloco namespace -. A lata definição de ser, obviamente, fora dela

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top