c++ - 调用使用 __LINE__ 构建的函数名称

标签 c++ macros c-preprocessor

假设,我从下面的代码构建了一个独特的函数体:

#define TOKENPASTE(x, y) x ## y
#define TOKENPASTE2(x, y) TOKENPASTE(x, y)
#define UNIQUE static void TOKENPASTE2(Unique_, __LINE__)(void)

如何调用这个函数?

宏定义取自:Creating C macro with ## and __LINE__ (token concatenation with positioning macro) .

最佳答案

没有。你不能。因为您无法在运行时确定函数名称。 (即调用 Unique_22Unique_44 。但是你绝对可以调用 Unique<22>Unique<44> )

所以你可以使用template解决方案。声明Unique如下:

template<unsigned int LINE> void Unique ();

#define像这样的宏:

#define UNIQUE template<> Unique<__LINE__>() {}

我建议使用 __COUNTER__而不是 __LINE__如果你的编译器支持它。 [注意:这意味着您可以在任何行中调用 UNIQUE仅一次,宏也应在全局或 namespace 中扩展作用域(不在方法内部)。]

关于c++ - 调用使用 __LINE__ 构建的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6556100/

相关文章:

c++ - 跟踪宏扩展

c - clang 编译器中用于定义预处理器使用的宏的标志是什么?

ios - 管理两个目标 iOS 的单个屏幕

c++ - 关于一篇介绍C++接口(interface)的文章的问题

c++ - C++内存管理必读文章

c++ - C/C++预处理器宏可以有默认参数值吗?

c++ - 将预处理器变量传递给 nmake 构建环境

c++ - 如何在Windows操作系统中创建make文件并使用cmd运行它

c++ - 神秘的相对路径库依赖

vim - 我想在我的 .vimrc 中保存一个 vim 宏?