Как мне справиться со следующей ситуацией:
Я пишу свой собственный класс векторного 2D и имею следующий код:
class Vector2 : public (...)
public:
Vector2(float x, float y) {
local_vector_storage_[0] = x;
local_vector_storage_[1] = y;
}
template <typename Iterator> Vector2(Iterator begin, Iterator end) {
ASSERT(end - begin == 2);
resize(2);
std::copy(begin, end, local_vector_storage_.begin());
}
// ...
};
Теперь, если я скажуVector2 v(3.0f, 4.0f);
он прекрасно компилируется и вызывает соответствующий конструктор float.
Но если я напишу Vector2 v(3, 4);
, то это не получится, потому что шаблонный конструктор итератора «подходит лучше» и Vector2(Iterator(3), Iterator(4))
.
Что мне делатьв этом случае?
Моя идея была о введении assign(It1, It2)
метода члена вместо конструктора, но, может быть, есть лучшее решение?
Редактировать:
Кроме того, что вы думаете о ASSERT(end - begin == 2)
линии?Я знаю, что это означает, что я не могу, например, передать итераторы std::list
, но обеспечивает дополнительную безопасность.Должен ли я сделать это или нет?