gpt4 book ai didi

c++ - 是否可以在 C++ 中使用作用域类型作为宏名称?

转载 作者:太空狗 更新时间:2023-10-29 20:53:51 24 4
gpt4 key购买 nike

我想定义一个宏来完成以下操作:

#define std::vector Vector 

我不能这样做,因为宏名称中似乎不允许使用“:”。我想这样做的原因是我正在尝试使用 Stroustrup 的范围检查 vector (来自他的编程原理和实践一书中的 std_lib_facilities.h)。他使用:

// disgusting macro hack to get a range checked vector:
#define vector Vector

(评论是 Stoustrup 的)

问题是我不希望在声明 Vector 的头文件中包含“using namespace std;”。这意味着我需要在其他头文件中使用 std::vector,然后 Stroustrup 的“macro hack”不起作用。我收到与不存在的“std::Vector”相关的错误。

所以我的问题是:是否可以使用完全限定的类型名称作为宏名称,以便将其替换为“Vector”之类的名称?

最佳答案

不要使用预处理器。这就是别名模板的用途:

template<typename T>
using vector_in_use = std::vector<T>;

您在整个代码库中使用 vector_in_use,它将使用 std::vector 编译您的代码。然后,要切换你只需要替换一行:

using vector_in_use = Vector<T>;

关于c++ - 是否可以在 C++ 中使用作用域类型作为宏名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41272368/

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