【发布时间】:2017-05-28 20:17:53
【问题描述】:
假设我有一个 std::array<SomeType, N>,我想调用一个函数,该函数使用迭代器来处理 std::array 中的对象,但不知道容器是 std::array。
SomeType 是一个具有公共成员函数 doSomething() 的类
例如一个函数可能是:
template<typename Iterator>
void action(Iterator &beg, Iterator &end) {
for (; beg != end; ++beg)
beg->doSomething();
}
可以通过以下方式调用此函数:
int main() {
std::array<SomeType, 10> a;
action<std::array<SomeType, 10>::iterator>(a.begin(), a.end());
}
但我想知道这是否是这样做的方法?特别是因为模板可以用于每个类。有没有办法将函数限制为SomeType,而不让函数知道容器是std::array?
【问题讨论】:
-
编写的代码无法编译。至少它不是格式良好的 C++。 Demo
标签: c++ c++11 templates iterator containers