Предполагая, что у меня есть 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] (http://melpon.org/wandbox/permlink/tw8f7mpNxZTZel9X) –