gpt4 book ai didi

c++ - 使用模板的 GoogleTest

转载 作者:太空狗 更新时间:2023-10-29 21:33:18 24 4
gpt4 key购买 nike

希望这个问题不要太傻。我在使用 gtest 方面还很陌生,很长一段时间以来我都不使用 C++。假设 w 有这个简单的模板 Point 类:

template <class T>
struct Point
{
union
{
T _data [2];
struct { T x, y; };
};
constexpr Point(T x_, T y_) noexcept : x(x_), y(x_) {}
};

然后使用 gtest,我试图检查 Point 是否是默认可构造的:

TEST_P(PointTest,Concept)
{
ASSERT_TRUE(std::is_nothrow_constructible<Point<float>,float,float>::value);
}

然后我使用带有 C++11 标志的 Clang 6.0.1 得到这个编译错误:

"error: too many arguments provided to function-like macro invocation"

欢迎任何帮助。我知道在组合模板和 googletest 时必须特别小心。但是我没有想出解决办法。谢谢!

最佳答案

我想这是识别模板参数之间逗号的 C++ 预处理器的问题

// ...................................................v.....v
ASSERT_TRUE(std::is_nothrow_constructible<Point<float>,float,float>::value);

作为宏参数分隔符。

我建议在宏调用之外计算值

TEST_P(PointTest,Concept)
{
constexpr auto val
= std::is_nothrow_constructible<Point<float>, float, float>::value;

ASSERT_TRUE( val );
}

或者通过一个 using 作为类型

TEST_P(PointTest ,Concept)
{
using inc = std::is_nothrow_constructible<Point<float>, float, float>;

ASSERT_TRUE( inc::value );
}

关于c++ - 使用模板的 GoogleTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818382/

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