Определите размер контейнера из списка инициализации (CWG 1591). Каков правильный путь?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Определите размер контейнера из списка инициализации (CWG 1591). Каков правильный путь?

Сообщение Anonymous »

У меня есть класс Vec, который работает, как показано ниже, и мне нужно знать, как написать конструктор и/или руководство по выводу, чтобы список инициализаторов, заключенный в фигурные скобки, выводил C как std::array. Разумеется, он работает и с std::vector, поскольку размер не обязательно знать.

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 

template
concept has_resize = requires(T t)
{
{t.resize(0)};
};

template
class Vec
{
C elems;
public:
template
requires std::integral && std::is_unsigned_v
auto operator[](IndexType i) const
{
return elems[i];
}
auto size()               const { return elems.size(); }
template
Vec(std::initializer_list init)//MEMBER INITIALIZER LIST?
{
// WHAT CODE GOES HERE?
}
Vec(auto init)
{
if constexpr (has_resize)
elems.resize(init.size());
for (decltype(init.size()) i = 0; i Vec;

//WHAT'S THE CORRECT DEDUCTION GUIDE?

int main()
{
Vec v0({1, 4, 7});
Vec v1(std::array{2, 5, 8});
Vec v2(std::vector{3, 6, 9});
}
Редактирование 1. Идея состоит в том, чтобы не изменять вызов Vec v0({1, 4, 7}); или Vec v0{1, 4, 7};< /code> конечно.


Подробнее здесь: https://stackoverflow.com/questions/784 ... -right-way
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»