Pergunta

Ao criar uma biblioteca em um espaço particular, muitas vezes é conveniente para fornecer aos operadores sobrecarregados para as classes em que namespace. Parece (pelo menos com g ++) que os operadores sobrecarregados podem ser aplicados, quer de namespace da biblioteca:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

ou o namespace global

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);

Do meu testes, ambos parecem funcionar bem. Existe alguma diferença prática entre essas duas opções? Ou é melhor abordagem?

Foi útil?

Solução

Você deve defini-los no espaço de nomes de biblioteca. O compilador vai encontrá-los de qualquer maneira, através de pesquisa dependente argumento.

Não há necessidade de poluir o namespace global.

Outras dicas

Colocá-lo no espaço de nomes de biblioteca funciona devido a Koenig pesquisa .

Você deve defini-lo no espaço de nomes, tanto porque a sintaxe será menos detalhadas e não atravancar o espaço global.

Na verdade, se você definir suas sobrecargas em sua definição de classe, isso se torna uma questão discutível:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

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