Я пытаюсь создать водонепроницаемый интерфейс для библиотеки, которую я проектирую. Пользователь должен ввести двумерные данные, и поэтому я подумал, что интерфейс итератора, подобный std::transform
, будет прозрачным.
Тем не менее, я не уверен, как исключение обрабатывать любые злоупотребления итераторами.
Мой интерфейс такой (я могу изменить интерфейс, если есть):
template<typename InputItrX, typename InputItrY>
set_data(InputItrX beginX, InputItrX endX, InputItrY beginY)
{
//What exception handling should I do here?
size_t array_size = endX-beginX; //get the size of the xarray.
my_xVector.resize(array_size); //resize my internal container
my_yVector.resize(array_size); // ..and for the ydata.
std::copy(beginX, endX, my_xVector.begin()); //copy X
std::copy(beginY, beginY+array_size, my_yVector.begin()); //copy Y
}
Например, моя программа становится неопределенной, если пользователь запутался в интерфейсе и пишет
set_data(xdata.begin(), ydata.begin(), xdata.end());
или, может быть, их xdata
имеет 20 элементов, но их ydata
не имеет ни одного.
Можно ли проверить такие ошибки в интерфейсе моей библиотеки?