是否可以将带有逗号的语句传递到提升测试宏中
Is it possible to pass a statement with a comma into a boost test macro?
当我想对我用boost::test编写的小类进行单元测试时,我发现boost MACRO来检查/要求/....如果传递的语句包含",",则不能直接使用。
以下示例不会编译为预处理器报告macro "BOOST_CHECK_NO_THROW" passed 2 arguments, but takes just 1
BOOST_CHECK_NO_THROW({cache_map<int, int> test1(3);});
只是为了确认它来自我们用来分隔模板参数的逗号,我使用了以下内容,并且编译没有问题。
BOOST_CHECK_NO_THROW({string test1("test");});
解决方法是使用 typedef
别名而不是显式类型,但你有另一个想法吗?
对于简单的表达式,解决方案是将宏参数放在括号中,例如
BOOST_CHECK((std::is_same<int, int>::value));
但是,由于您在那里有一个块,因此该路由对您不开放(除非您不关心可移植性并且您的编译器接受它;例如,gcc 确实如此)。但是,知道表达式很好,我们可以用lambdas欺骗我们摆脱困境:
BOOST_CHECK_NO_THROW(([]{cache_map<int, int> test1(3);}()));
不过,您是否认为这比类型别名更漂亮取决于您。
与编译器相比,预处理器很简单,并且对它预处理的实际文本一无所知(它可以用于任何类型的文本文件,而不仅仅是 C 或 C++ 源文件)。这意味着它只是在宏调用中使用逗号作为参数分隔符,并且不能传递包含逗号的宏参数。
如您所述,解决特定问题的一种方法是使用类型别名。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 如果语句表达式调用函数,则需要测试是否为 true
- 在单个if语句中测试多个布尔值
- 返回语句中的条件测试
- 如何使用switch语句(C++)测试一个数字是素数还是可被7整除
- C++ if 语句未正确测试
- 是否可以将带有逗号的语句传递到提升测试宏中
- 如何使用if语句测试函数
- if语句-测试字符串或字符的大写,小写和数字
- c++基础- If语句测试
- C++ || 的排序和 &&在 if 语句中测试等式时