using
선언을 헤더 파일에 넣을 때 발생할 수있는 문제를 이해합니다. 그러지 않으려 고합니다. 대신 클래스 파일 내에 using
(또는 namespace foo =
)을 넣어 헤더 파일에서 반복적 인 입력을 줄이려고했습니다. 불행히도 컴파일러 오류가 발생합니다. 그것은 유용한 기능이 될 것 같습니다.왜 "using"선언을 클래스 선언 안에 넣을 수 없습니까?
#ifndef FOO_H
#define FOO_H
// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"
// using namespace gee::whiz::abc::def; // BAD!
namespace x {
namespace y {
namespace z {
struct Foo {
using namespace gee::whiz::abc::def; // Illegal.
namespace other = gee::whiz::abc::def; // Illegal.
// Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded
Foo(other::Hello &hello); // better
//...
};
} } } // end x::y::z namespace
#endif // FOO_H
실제 코드에서 네임 스페이스 이름은 훨씬 길고 성가 시며 변경할 수있는 것이 아닙니다.
누구나 이것이 합법적이지 않은 이유를 설명하거나 해결 방법이있는 경우 (더 나은) 설명 할 수 있습니까?
이것은 여전히 피하려고 시도하는 네임 스페이스를 오염시킵니다. – Trent
클래스 선언 내에서 사용되는 경우 아닙니다. –
예, 작동합니다! 그리고 그것을 개인용 typedef로 만들면 다른 코드가 우연히 그것을 사용할 수 없습니다. – Dan