嗨,我正在阅读std::optional 这里的实现,我在其单元测试文件中找到以下行.
struct caller {
template <class T> caller(T fun) { fun(); }
};
# define CAT2(X, Y) X ## Y
# define CAT(X, Y) CAT2(X, Y)
# define TEST(NAME) caller CAT(__VAR, __LINE__) = []
Run Code Online (Sandbox Code Playgroud)
我真的不明白这些线是做什么的.caller似乎是一个调用函数的模板,但它如何被用作caller CAT ...?X ## Y这里的意思是什么?稍后在文件中,用户使用定义单元测试TEST,但它们不会出现在任何可执行代码中(我的意思是它们main至少不在函数中调用),所以我甚至不确定编译后的二进制文件是否实际运行了测试.你能解释一下这里发生了什么吗?谢谢!
编辑:非常确定在运行二进制文件时执行测试,但是如何实现?
for*_*818 10
您可以在预处理后查看输出(-E对于gcc)...
这是我添加宏的用法的代码:
struct caller {
template <class T> caller(T fun) { fun(); }
};
# define CAT2(X, Y) X ## Y
# define CAT(X, Y) CAT2(X, Y)
# define TEST(NAME) caller CAT(__VAR, __LINE__) = []
TEST(disengaged_ctor) { foo(); };
Run Code Online (Sandbox Code Playgroud)
caller __VAR10 = []{ foo(); };
Run Code Online (Sandbox Code Playgroud)
我__VAR和未使用的NAME*有点困惑.但是,[]{ foo(); }是一个lambda,用于caller在callers构造函数中创建一个gets调用.
*=我想这个想法如下:假设您收到一条错误消息,说明您__VAR10在线10找到了错误TEST(disengaged_ctor),即.在NAME失败的试验.
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |