Я хотел бы создать псевдоним пространства имен, который можно изменить глобально, чтобы ссылаться на разные области во время выполнения.Подумайте об этом:
#include <iostream>
namespace scopePrimary {
int somethingOfInterest = 1;
}
namespace scopeSecondary {
int somethingOfInterest = 2;
}
namespace scopeTarget = scopePrimary;
int doStuffInTargetScope() {
using namespace scopeTarget;
return somethingOfInterest;
}
int main() {
// Do something with the somethingOfInterest variable defined in scopePrimary
std::cout << "doStuffInTargetScope():\n" \
" somethingOfInterest = " << doStuffInTargetScope() << std::endl;
namespace scopeTarget = scopeSecondary;
using namespace scopeTarget;
// Do something with the somethingOfInterest variable defined in scopeSecondary
std::cout << "doStuffInTargetScope():\n" \
" somethingOfInterest = " << doStuffInTargetScope() << std::endl;
std::cout << "main():\n somethingOfInterest = "
<< somethingOfInterest << std::endl;
}
Теперь вышеприведенный код компилируется, но вместо получения результата я бы ожидал:
doStuffInTargetScope():
somethingOfInterest = 1
doStuffInTargetScope():
somethingOfInterest = 2
main():
somethingOfInterest = 2
Я получаю этот вывод:
doStuffInTargetScope():
somethingOfInterest = 1
doStuffInTargetScope():
somethingOfInterest = 1
main():
somethingOfInterest = 2
Кажется, что при попытке переопределить namespace scopeTarget
, C ++ будет использовать только самое локальное определение псевдонима, а не перезаписывать глобальный псевдоним.Кто-нибудь знает обходной путь для достижения моей цели здесь?