使用流将对象转换为字符串

Using streams to convert objects to strings

本文关键字:转换 字符串 对象      更新时间:2023-10-16

我有一个覆盖流操作符的对象<<作为字符串流,使控制台打印更容易。

cout << obj << endl;

我想在单元测试中通过比较字符串输出和预期字符串来测试这个功能。我目前是这样做的:

stringStream ss;
ss << obj;
string objStr = ss.str();
EXPECT_EQ(objStr, "expected string output");

这不是特别可读,当然也不简洁。有没有更容易,更短,更简单的方法来获得一个对象的字符串表示?

你可以写一个小的,通用的实用程序函数来为你做这件事:

#include <utility>
#include <string>
#include <sstream>
template<typename T>
std::string make_string(T const& o)
{
    std::stringstream ss;
    ss << o;
    return ss.str();
}

并这样使用:

EXPECTED_EQ(make_string(obj), "expected string output");