gpt4 book ai didi

c++ - 寻找惯用的方式来连接对象的字符串表示

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:42 25 4
gpt4 key购买 nike

考虑到我们有这个:

示例代码A:

struct parameter
{
string name, value;
};

ostream& operator<<(ostream& out, const parameter& p)
{
return out << p.name << "=" << p.value;
}

示例代码B:

auto seq = {
parameter{ "language", "En" },
parameter{ "q", "search+term" }
};

vector<string> tmp;
transform(begin(seq), end(seq), std::back_inserter(tmp),
[](const auto& p) {
ostringstream out;
out << p;
return out.str();
});
auto result = boost::algorithm::join(tmp, "&");

有什么方法可以使示例代码 B 更加地道?在计算 result 时,我试图避免使用 tmp

最初我尝试直接在 seq 上调用 boost::algorithm::join(这不起作用,因为 join 仅适用于作为可连接元素的字符序列).

我也可以使用单个 ostringstream 并完全放弃 boost::algorithm::join(但这会附加一个额外的 &) ,或者迭代元素的数量,并避免在末尾明确附加额外的符号,或者定义我自己的 ostream 迭代器(但是 is a lot of code to write )。

谢谢

最佳答案

对于更惯用的东西,您可以使用 boost::adaptors::transformed通过以下方式:

std::vector<parameter> seq = {{"language", "En"}, {"q", "search+term"}};
auto result = boost::algorithm::join(seq |
boost::adaptors::transformed([](parameter const &p){return p.name + "=" + p.value;}),
"&");

Live Demo

没有临时 vector ,没有昂贵的字符串流。

关于c++ - 寻找惯用的方式来连接对象的字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076336/

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