Можно ли вывести параметры шаблона кортежа из инициализации типа скобки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли вывести параметры шаблона кортежа из инициализации типа скобки?

Сообщение Anonymous »

В этом примере можно ли разрешить вывод параметров шаблона типа кортежа?

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

#include
#include

template
void fun(std::tuple t, std::string other){}

int main(){
fun(std::tuple(2.0, 3), std::string("other")); // ok
fun(std::make_tuple(2.0, 3), std::string("other")); // ok, but trying to avoid `make_tuple`
fun({2.0, 3},std::string("other")); // desired syntax but
// giving compilation error: candidate template ignored: couldn't infer template argument 'T1' void fun(std::tuple t)
}
Я добавил второй аргумент, другой, чтобы избежать решений, включающих аргументы с переменным числом аргументов на уровне функции fun. Кроме того, я стараюсь избегать использования make_tuple, по крайней мере, в пользовательском коде (т. е. в main()). На самом деле это не обязательно должен быть тип кортежа, если разрешен «желаемый синтаксис» и каким-то образом типы его элементов могут быть выведены на более позднем этапе.
(Кроме того, хотя это и похоже, это не имеет ничего общего с инициализатором_list, поскольку он вообще не работает с разными элементами в фигурных скобках)
Это не работает, по крайней мере, с clang 3.2 и gcc 4.7.2. Есть ли надежда, что он будет работать с текущим или будущим стандартом? (например, Future(?) Initializer_tuple.)
(Это может быть очень полезно для добавления выразительности вызовам функций путем агрегирования подэлементов, но с этим можно поспорить)< /p>

Примечание. Для примера кода кажется, что std::forward_as_tuple более подходит, чем std::make_tuple, поэтому аргументы не обязательно копируются: http://en.cppreference.com/w/cpp/utilit ... d_as_tuple. Все равно это не так хорошо, как если бы существовала встроенная языковая функция для разнородных списков инициализаторов.

Подробнее здесь: https://stackoverflow.com/questions/167 ... nitializat
Ответить

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

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

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

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

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