У меня есть перечисление в пространстве имен, и я хотел бы использовать его, как если бы он находился в другом пространстве имен. Интуитивно я решил, что могу использовать "использование" или "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
};
}