gpt4 book ai didi

c++ - 是否可以在 C++ 中创建可重新定义的命名空间别名?

转载 作者:行者123 更新时间:2023-12-04 17:06:20 26 4
gpt4 key购买 nike

我想创建一个命名空间别名,该别名可以全局更改以在运行时引用不同的范围。考虑一下:

#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++ 只会使用最局部的别名定义,而不是覆盖全局别名。
有没有人知道在这里实现我的目标的解决方法?

最佳答案

您不能在运行时更改 namespace 。函数指针会达到预期的效果。

有关命名空间,请参阅:Renaming namespaces

对于函数指针,我发现这很有用:https://www.learncpp.com/cpp-tutorial/78-function-pointers/

关于c++ - 是否可以在 C++ 中创建可重新定义的命名空间别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55603961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com