【发布时间】:2015-11-20 21:30:23
【问题描述】:
在我的 C++03 代码中,我有很多看起来像这样的函数:
class A {
public:
template <Iterator>
void doSomethingWithObjects(Iterator begin, Iterator end) {
for (Iterator point = begin; point != end; point++) {
mInternal.doSomething(*point);
}
}
private:
DataStructure mInternal;
};
我正在尝试在新代码中尽可能多地使用 C++11 的特性,尤其是基于范围的 for 循环。我的问题是,我将如何使用模板化迭代器来做到这一点?有没有一种神奇的 C++ 结构,它采用两种模板化迭代器类型,并将它们转换为范围表达式?换句话说,我正在寻找这样的东西:
class A {
public:
template <Iterator>
void doSomethingWithObjects(Iterator begin, Iterator end) {
static_assert(std::is_same<Point, typename std::decay<Iterator>::type>::value, "wrong type mate!"); // extra credit
for (auto&& point : std::magic(begin, end)) {
mInternal.doSomething(point);
}
}
private:
DataStructure mInternal;
};
如果在 C++11 中有一种新的、首选的方法来执行这种“向这个结构中添加许多对象”,我也很乐意。
【问题讨论】:
-
你的意思是this?
-
是的,完全正确!是否有一个
std结构可以做到这一点? -
不,据我所知,在 C++11 和 C++14 的标准库中没有类似的东西
标签: c++ c++11 for-loop iterator