나는 네임 스페이스에 열거 형을 가지고 있으며 다른 네임 스페이스에있는 것처럼 그것을 사용하고 싶습니다. 직관적으로, 나는 이것을 사용하기 위해 'using'또는 'typedef'를 사용할 수 있다고 생각했지만 실제로는 작동하지 않습니다.C++에서 열거 형을 다른 네임 스페이스로 어떻게 가져 옵니까?
namespace foo
{
enum bar {
A
};
}
namespace buzz
{
// Which of these two methods I use doesn't matter,
// the results are the same.
using foo::bar;
//typedef foo::bar bar;
}
int main()
{
foo::bar f; // works
foo::bar g = foo::A; // works
buzz::bar x; // works
//buzz::bar y = buzz::A; // doesn't work
buzz::bar z = foo::A;
}
문제는 열거 자체가 가져 오는 것입니다하지만 요소 : 없음 코드는 GCC와 일 CC에서 테스트, 그것을 증명합니다. 불행히도, 기존의 enum이 다른 기존 코드를 많이 손상시키지 않으면 서 추가 더미 네임 스페이스 또는 클래스에 포함되도록 변경할 수는 없습니다. 내가 생각할 수있는 가장 좋은 방법은 수동으로 열거 재현하는 것입니다
namespace buzz
{
enum bar
{
A = foo::A
};
}
을하지만 그것은 DRY principle을 위반하는 것입니다. 더 좋은 방법이 있습니까?
"하지만 DRY 원칙을 위반합니다." 이 경우 원칙을 다시 생각해 보겠습니다. "더 좋은 방법 있니?" enum (불행하게도)은 범위가 아니지만 enum 요소를 추가 struct 또는 네임 스페이스에 넣을 수 있습니다. – SigTerm
불행히도 다른 코드는 다른 열거 형에 있지 않은 원래 열거 형에 의존합니다./ –
와우 ... 누군가 그와 비슷한 것을 묻지 않았다면, 나는 그것이 작동 했어야한다고 대답했을 것입니다. C++의이 어두운 구절을 드러내 주셔서 감사합니다 ... +1. – paercebal