gpt4 book ai didi

c++ - 谷歌测试 EXPECT_EQ 和 boost::make_recursive_variant

转载 作者:行者123 更新时间:2023-11-28 08:22:06 25 4
gpt4 key购买 nike

我有一个 boost 递归变体,如下所示。当我使用断言比较两个递归变体对象时,它工作正常但使用 EXPECT_EQ 时,它给出编译错误。

typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

variant_type b1 = true;
rvariant_type b2 = true;

assert(b1 == b2); //work fine

EXPECT_EQ(b1,b2); //gives compiler error.
EXPECT_EQ(boost::get<bool>(b1), boost::get<bool>(b2)); //works fine

boost/v1.46.1/include/boost/variant/detail/variant_io.hpp:64: 错误:'operator<<' 在'((const boost::detail::variant::printer >> *)this)->boost::detail::variant::printer >>::out_ << 操作数'

最佳答案

gtest 大量使用输出流,但似乎 boost::variant 对通过重载运算符<< 打印的支持非常有限,如果不是不存在的话。

看看这个:

#include <boost/variant.hpp>
#include <boost/cstdint.hpp>
#include <boost/uuid/uuid.hpp>
#include <iostream>
typedef boost::make_recursive_variant<bool, boost::uint8_t, boost::uint32_t,
boost::int32_t, double, std::string, boost::uuids::uuid>::type rvariant_type;

int main() {
rvariant_type v1 = true;
std::cout << v1 << std::endl;
return 0;
}

这个非常短的程序给出了与从 gtest 得到的相同的编译错误。

补充一下:

std::ostream& operator<<(std::ostream& out, const rvariant_type& p) {
return out << boost::get<bool>(p);
}

让我的测试编译,我会看看我是否能让你的例子也能正常工作。

更新:我刚刚编译并在放置上述运算符<<后根据您的代码成功运行了测试,因此缺少运算符<<正是导致它的原因。

关于c++ - 谷歌测试 EXPECT_EQ 和 boost::make_recursive_variant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449234/

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