gpt4 book ai didi

c++ - 编译器错误,使用静态多态性模拟 C++ 单元测试

转载 作者:行者123 更新时间:2023-11-28 03:31:32 25 4
gpt4 key购买 nike

我正在尝试将静态多态性应用于单元测试

template<typename T, typename Output> class HistogramWriter
{
public:
static void write(const RGBHistogram<T> &hist, Output &output)
{
output << "ABCD" << std::endl;
}
};

现在我正在尝试将输出输出到模拟类以进行单元测试

struct TestMock
{
std::string data;
};

istream& operator>>(istream &stream, TestMock &mock)
{
stream >> mock.data;
}

如果我将 T 设置为 int 并将 Output 设置为 TestMock,则它不起作用。当然,如果我将输出设置为 std::cout,它会起作用。

我正在尝试将字符串复制到 TestMock 的数据中。但我只是不知道该怎么做,编译器提示二进制“<<”找不到运算符

最佳答案

HistogramWriter::write使用输出运算符写入 output .然而,你不要为您的 TestMock 提供任何输出运算符类,只有一个输入运算符。

另外,output参数应该是一个,您可以通过定义一个operator<< 将其输出到。为你的TestMock类,您只需告诉编译器如何输出一个 TestMock 的实例 到一个流,你没有定义流本身。

要解决此问题,您必须使用模板在类中 声明输出运算符。像这样:

struct TestMock
{
std::string data;

template<class T>
TestMock& operator<<(const T& value)
{
std::ostringstream os;
os << value;
data += os.str();
return *this;
}
};

上面的代码将创建一个 TestMock 的实例。表现得像一个流,所有发送给它的输出都将附加到 data成员变量。

我建议您阅读更多有关输入和输出运算符以及如何重载/覆盖它们的信息。

关于c++ - 编译器错误,使用静态多态性模拟 C++ 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407345/

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