假设我有一个返回一定范围值的接口。该接口的实现可能使用不同的容器来提供这些数字。
var count = 0;
[
["1", "X5CrNi18", "0", "55", "0", "Steel"],
["2", "X5CrNi18", "100", "55", "0.5", "Steel"],
["6", "S355J2Q +Z35", "100", "20", "0.68", "Steel"],
["8", "S355J2Q +Z35", "300", "20", "0.3", "Steel"],
["count++", "text value from text input", "value from input Num 1", "0", "value from input Num 2", "Just some default text"],
["count++", "text value from text input", "value from the next input Num 1", "0", "value from the next input Num 2", "Just some default text"]
]
我想知道是否有一种方法可以使容器类型远离迭代器。
class MyClassI
{
public:
virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const = 0;
}
class MyClassC : public MyClassI
{
public:
virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const
{ return std::make_pair(numbers.begin(), numbers.end(); }
private:
std::vector<int> numbers;
}
我当然可以将原始迭代器放在堆上,并且可以用模板类包装该指针,以将值类型作为迭代器提供。
我想知道boost中是否已经有类似的东西或其他东西了。
我可以想象像std / boost函数之类的东西,其中可调用对象被衰减(如果它是函数或结构),并且“ state”部分(如果足够小)存储在对象内部,以避免堆分配-如果可能。
答案 0 :(得分:0)
似乎已经有了答案。 “ Range”库提供了一个范围适配器(boost :: adaptors :: type_erased),它可以衰减容器或其他已经应用的适配器。因此,我们最终得到一个boost :: any_range,它在迭代类型旁边还有其他一些参数,但容器不再有