Универсальная инициализация - конструктор заполнения вектора - PullRequest
0 голосов
/ 01 мая 2019

Возможно ли в c ++ 17 вызвать этот конструктор

 vector( size_type count, const T& value, const Allocator& alloc = Allocator());

, используя унифицированную инициализацию для vector<int>?Кажется, что std::vector<int> data{10, 20} создает вектор размером два.

Ответы [ 2 ]

4 голосов
/ 01 мая 2019

Возможно ли это? Конечно.

struct size_type {
    template<class T, std::enable_if_t<std::is_same_v<T, std::vector<int>::size_type>>* = nullptr>
    operator T() const {
        return val;
    }
    std::vector<int>::size_type val;
};

std::vector<int> vi {size_type{10}, 4}; // vector of 10 ints with value 4

Это работает до тех пор, пока value_type отличается от типа size_type.

Стоит ли это делать? Нет.

3 голосов
/ 01 мая 2019

Sure:

std::vector<int> vi{10, 4, std::allocator<int>()};

Но в скобках нет ничего плохого.

...