And*_*eas 1 c++ containers templates iterator c++11
假设我有一个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();
}
Run Code Online (Sandbox Code Playgroud)
通过以下方式调用此功能:
int main() {
std::array<SomeType, 10> a;
action<std::array<SomeType, 10>::iterator>(a.begin(), a.end());
}
Run Code Online (Sandbox Code Playgroud)
但我想知道这是不是这样做的?特别是因为模板可以用于每个类.有没有办法限制功能,SomeType而不让功能知道容器是一个std::array?
修复你的代码:你不应该要求左值参数.事实上,迭代器应该是有效复制的.
template<typename Iterator>
void action(Iterator beg, Iterator end)
// ^^^^^^^^^^^^ ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)让模板参数推导完成它的工作:
action(a.begin(), a.end());
Run Code Online (Sandbox Code Playgroud)