gpt4 book ai didi

c++ - 禁用没有宏的 C++ 代码

转载 作者:太空狗 更新时间:2023-10-29 23:42:07 24 4
gpt4 key购买 nike

我讨厌宏。我尽量避免使用它们,但我偶尔需要它们来启用/禁用我的代码中的功能。通常:

#ifdef THREAD_SAFE
typedef boost::mutex Mutex;
typedef boost::mutex::scoped_lock ScopedLock;
#else
typedef struct M { } Mutex;
typedef struct S { S(M m) { } } ScopedLock;
#endif

这样我就可以保持我的实际代码不变。当宏未定义时,我相信编译器会删除安慰剂代码。

我知道模板特化可能是一种解决方案,但这将涉及大量重写/代码复制。

即使是 C++ 专家也能猜到我欺骗编译器的方式有问题。我正在寻找更好的解决方案。

最佳答案

您使用的不是宏,而是普通的预处理器功能。此外,您不依赖编译器,而是依赖预处理器。
编译器只会看到两个版本中的一个,另一个在编译步骤之前被淘汰。使用预处理器执行(有条件的)包含/排除代码没有错。这不是任何一种“作弊”,这完全是预处理器的目的。

关于c++ - 禁用没有宏的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781356/

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