gpt4 book ai didi

c++ - 从 std::vector (或其他序列)读取的流语法?

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:04 25 4
gpt4 key购买 nike

假设我有一个可以表示各种 POD 类型的 Variant 类,加上 std::string,我有一个模板方法 T get_value(const Variant&)可以从中提取底层类型。

假设我有一个 vector ,即。 std::vector<Variant> variants; ,我想用一种方便的语法从中读取几个值,如下所示:

int x;
double y;
std::string z;
// Get elements 0, 1, and 2 as int, double, and string respectively
streamlikeObject >> x >> y >> z;

问题是:什么是形成假设 streamlikeObject 的好方法?在例子中?我可以想象用提取运算符创建我自己的类,但我只是想知道 std 库中是否有某些东西或者 Boost 是否可以处理这类事情。

或者换句话说:如何以相似的代码简洁度提取这些数据?也许有更好的流语法替代方法。

最佳答案

类似(未测试)

template <typename Iter>
class Extractor {
Iter cur;
Iter const &end;

public:
Extractor(Iter const &begin, Iter const &end)
: cur(begin), end(end) { }

template <typename T>
Extractor &operator>>(T &x)
{
if (cur == end)
throw SomeException();
x = cur->get_value();
++cur;
return *this;
}
};

Extractor<std::vector<Variant>::const_iterator> streamlikeObject(v.begin(), v.end()); 构建.

或者,如果您只想从容器中提取,您可能希望在容器类型而不是迭代器类型上参数化模板以节省输入(双关语)。

关于c++ - 从 std::vector (或其他序列)读取的流语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525463/

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