Можно ли сделать переопределимый псевдоним пространства имен в C ++? - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы создать псевдоним пространства имен, который можно изменить глобально, чтобы ссылаться на разные области во время выполнения.Подумайте об этом:

#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 ++ будет использовать только самое локальное определение псевдонима, а не перезаписывать глобальный псевдоним.Кто-нибудь знает обходной путь для достижения моей цели здесь?

1 Ответ

0 голосов
/ 10 апреля 2019

Вы не можете изменять пространства имен во время выполнения. Функциональные указатели позволят достичь желаемого эффекта.

Пространства имен см .: Переименование пространств имен

Для указателей на функции я нашел это полезным: https://www.learncpp.com/cpp-tutorial/78-function-pointers/

...