Прохождение списка инициализаторов с закреплением скобок с несколькими типами для функционированияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Прохождение списка инициализаторов с закреплением скобок с несколькими типами для функционирования

Сообщение Гость »

Как можно передать список инициализаторов с несколькими типами?

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

#include 

template 
void g(std::tuple args) {}

int main() {
g({1, 'a', 0.4});                     // does not work
g({1, 'a', 0.4});  // works
g(std::tuple{1, 'a', 0.4});           // works
}
Я хочу, чтобы строка g ({1, 'a', 0.4}); для работы без редактирования. Компилятор (G ++ 11.3.0) говорит, что он не может преобразовать в std :: tuple .
Это уже удивительно, потому что я ожидал, что он выведет тип std :: tuple . Дальнейшие исследования показали, что компилятор может правильно вывести тип std :: initializer_list в следующем: < /p>

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

#include 

template 
void f(std::initializer_list arg) {}

int main() {
f({1, 2, 3});                       // works
f({1, 2, 3});                  // works
f(std::initializer_list{1, 2, 3});  // works
}
< /code>
Это очень близко к фактической цели, но она работает только в том случае, если типы объектов в списке одинаковы. Мой первый подход состоял в том, чтобы посмотреть на реализацию std :: initializer_list и реализовать его сам, но я даже не получаю линию F ({1, 2, 3}); 
, работающая с использованием моей собственной реализации initializer_list. Только f ({1, 2, 3}); работает с моим инициализатором_лиз. Таким образом, вопросы: < /p>

Возможно ли реализовать свой собственный init_list SO f ({1, 2, 3}); < /code>, когда F принимает пользовательский init_list в качестве аргумента? 0.4}); работа?>

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

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

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

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

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

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

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