gpt4 book ai didi

c++ - 是否可以将带逗号的语句传递到 boost 测试宏中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:29 25 4
gpt4 key购买 nike

当我想对我用 boost::test 编写的一个小类进行单元测试时,我发现如果您传递的语句包含 ',',则不能直接使用用于 CHECK/REQUIRE/.... 的 boost MACRO .

以下示例无法编译,因为预处理器报告宏“BOOST_CHECK_NO_THROW”传递了 2 个参数,但只需要 1 个

BOOST_CHECK_NO_THROW({cache_map<int, int> test1(3);});

为了确认它来 self 们用来分隔模板参数的逗号,我使用了以下内容并且编译没有问题。

BOOST_CHECK_NO_THROW({string test1("test");});

解决方法是使用 typedef别名 而不是显式类型,但您有其他想法吗?

最佳答案

用简单的表达式,解决方法是把宏参数放在括号里,比如

BOOST_CHECK((std::is_same<int, int>::value));

但是,由于您在那里有一个 block ,所以该路径对您不开放(除非您不关心可移植性并且您的编译器接受它;例如,gcc 接受)。虽然知道表达式很好,但我们可以用 lambda 来摆脱困境:

BOOST_CHECK_NO_THROW(([]{cache_map<int, int> test1(3);}()));

不过,您是否认为这比类型别名更漂亮取决于您。

关于c++ - 是否可以将带逗号的语句传递到 boost 测试宏中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28086801/

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