【发布时间】:2020-11-14 05:29:57
【问题描述】:
我已经定义了以下预处理指令:
#define TIMER(name) ::my_app::Timer timer##__LINE__(name)
使用如下:
TIMER("first");
TIMER("second");
我收到一条错误消息,指出第二个用法重新定义了 timer__LINE__。
::my_app::Timer timer__LINE__("first");
::my_app::Timer timer__LINE__("second");
我真正想要的是一个带有源代码行号的计时器定义,例如:
::my_app::Timer timer1("first");
::my_app::Timer timer2("second");
如果有什么用,我的clang版本详细信息:
❯ /Library/Developer/CommandLineTools/usr/bin/clang --version
Apple clang version 11.0.3 (clang-1103.0.32.29)
Target: x86_64-apple-darwin19.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
我看到了this syntax is used and works (::Hazel::InstrumentationTimer timer##__LINE__(fixedName.Data)) 的示例。为什么令牌粘贴操作符在我的场景中没有像我预期的那样工作?
【问题讨论】:
-
那里真的有用吗?
-
我认为是这样 - 有相当数量的贡献者,我怀疑使用它的人要多得多(它来自 YouTube 系列)。但原来是MSVC,所以也许编译器实现的差异导致它在那里工作?
-
感谢链接问题 - 完美解决。
标签: c++ token-pasting-operator