如何从输出流创建 std::string?

How to create std::string from output stream?

请原谅这个简单的问题,但我已经问了好几个小时了,但没有成功。我正在尝试实现一个功能:

std::string make_date_string()

我正在使用 Howard Hinnant 的日期库,它允许我做这样的事情:

cout << floor<days>(system_clock::now());

打印如下内容:

2017-07-09

我想弄清楚如何让输出进入 std::string 以便我可以 return 从我的函数中得到它,但我一无所获。

I'm trying to figure out how I can get that output to go in a std::string so I can return it from my function, but Im getting nowhere.

在这种情况下,您可以使用 std::ostringstream:

std::ostringstream oss;
oss << floor<days>(system_clock::now());
std::string time = oss.str();

旁注:

因为它看起来像你的辅助函数

template<typename Fmt>
floor(std::chrono::timepoint);

作为 iostream manipulator 实现,它可以与任何 std::ostream 实现一起使用。

已接受的答案是一个很好的答案(我已投赞成票)。

这是一个替代公式 using the same library:

#include "date.h"
#include <string>

std::string
make_date_string()
{
    return date::format("%F", std::chrono::system_clock::now());
}

会创建 std::string 格式的 "2017-07-09"。这个特殊的公式很好,因为您不必显式构造 std::ostringstream,并且您可以轻松地将格式更改为您喜欢的任何格式,例如:

    return date::format("%m/%d/%Y", std::chrono::system_clock::now());

现在 returns "07/09/2017".