A definição de uma classe dentro de um namespace
-
05-07-2019 - |
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.
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