У меня есть enum в пространстве имен, и я хотел бы использовать его, как если бы он был в другом пространстве имен.Интуитивно я подумал, что мог бы использовать 'using' или 'typedef' для достижения этой цели, но ни один из них на самом деле не работал.Фрагмент кода, чтобы доказать это, протестировано на GCC и Sun CC:
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;
}
Проблема в том, что само перечисление импортируется, но ни один из его элементов.К сожалению, я не могу изменить исходное перечисление, чтобы оно было заключено в дополнительное пустое пространство имен или класс, не нарушая много другого существующего кода.Лучшее решение, которое я могу придумать, это вручную воспроизвести перечисление:
namespace buzz
{
enum bar
{
A = foo::A
};
}
Но оно нарушает принцип DRY .Есть ли лучший способ?