и переопределением operator, (как в boost::assign), но просто элипсис почему ума сделать не хватило?
Вот вы такой умный, где были?
хотелось бы увидеть полноценный рабочий пример с эллипсисом
"умный"? По-моему то, что std::vector<int> a; a.reserve(5); a.push_back(1); a.push_back(2); a.push_back(3); a.push_back(4); a.push_back(5); — полный п..ц поймёт любой дурак.
В конструктор получить длину массива, а дальше n членов этого массива
vector(size_t size, ...)?
Ну например
замечательно, теперь не работает перегрузка vector(std::size_t size, T default_element)
Щас набрасывающий выкрутиться, дай виемя
Ну вариантов несколько. Например можно сделать vector(size_t size, size_t how_many_first_elements, ...) или сделать чтобы конструктор только память выделял, а значение задавались другим методом.
Как должно работать в vector<size_t>?
Не понял вопроса.
Ну этот конструктор конфликтовать будет всё с той же перегрузкой конструктора, о котором Александр писал
vector(size_t size, size_t how_many_first_elements, ...) обладает той же проблемой, он перестаёт работать на валидном коде vector<int>(1, 1) > или сделать чтобы конструктор только память выделял, а значение задавались другим методом. set_elements(std::size_t count, ...)? хорошо, API не поломали. но в эллипсис нельзя передавать ничего сложного, например std::string
Ну может не элипсис
Первой конструкций я предполагал "сколько элементов", "сколько первых будем инициализровать", остальное инициализируем 0
> но в эллипсис нельзя передавать ничего сложного, например std::string T* можно же?
Ну да. vector<int>(1, 1) создаёт вектор с содержимым [1] (одна единица), после добавления конструктора он начинает создавать вектор из одного нуля?
Отлично, то есть инициализировать будем так? std::vector<int> v; int a = 1; int b = 2; v.set_elements(2, &a, &b); ?
не, типа 1 - элемент, 1 - далее будет передано 1 значение для заполнения
и дальше сами значения
Это лучше чем push_back, неправда ли?
Ещё раз: vector<int>(N, M) создаёт вектор с содержимым N штук чисел, равных M. Что он должен создавать после добавления конструктора vector(size_t size, size_t how_many_first_elements, ...)?
Нет. vector<int>(N, M, ...) означает что будет создан вектор длиной N, а далее будет передано M элементов для инициализации.
Предлагаю самостоятельно найти в этом ошибку
пусть M = N и передали 0 параметров, что должно произойти? пусть N > 0, M = 0 и передали 0 параметров. что должно произойти?
1. пустой вектор 2. первые M членов заданы, остальные 0
1. а как отличить вызов от конструктора, который должен создать N элементов равных M? 2. см. вопрос 1. А чему равны первые M эл-ов?
Приведи любой пример используя их
Там будет тип T, а там условный vector_size_t
vec(FillFromVariadic, 1, 2, 3, 4, bool, 6.0);
А чем данная идея плоха?
Вербозно и она гипотетическая.
Обсуждают сегодня