Я реализую функцию, которая хочет l oop для нескольких элементов в массиве std ::, но мне все равно, какой длины массив std ::. Поэтому я подумал о следующей функции:
#include <stdio.h>
#include <array>
#include <iterator>
void foo(std::array<bool,0>::const_iterator begin, std::array<bool,0>::const_iterator end)
{
printf("iterator");
}
int main()
{
std::array<bool, 25> one;
std::array<bool, 33> two;
foo(one.cbegin(), one.cend());
foo(two.cbegin(), two.cend());
}
Я вполне согласен с этим, за исключением std::array<bool,0>
. У меня вопрос, есть ли другой способ указать итератор, необходимый для этой функции?
Обновление
Есть некоторые вещи, которые я должен упомянуть. Конечно, этот код является частью большей области, и я пытался скрыть как можно больше деталей.
- Я хочу убедиться, что используемый итератор имеет
bool
s. - Я использую C ++ 14
- Функция является частью интерфейса класса, и я хочу иметь возможность обрабатывать массивы нескольких размеров. Я не хочу мешать разработчикам интерфейса точно знать, какой размер массива.
class MyInterface
{
public:
virtual foo(std::array<bool,0>::const_iterator begin, std::array<bool,0>::const_iterator end) = 0;
~MyInterface() = default;
};
Я вспомнил, что виртуальные функции не могут быть шаблонизированы. Это означает, что мне придется шаблонизировать весь мой интерфейс, и это точно потеряло бы смысл, почему я пытался это сделать в первую очередь.