объявление функции для структурированных привязок

Можно ли использовать структурированные привязки только с какой-либо «структурой» в качестве возвращаемого значения?

Верните любой класс/структуру, например. кортеж здесь отлично работает:

auto f() 
{   
    return std::make_tuple(1,2.2);
}

Есть ли что-то, что позволяет что-то вроде:

auto f() -> [int,double]
{
    return { 1, 2.2 }; //  maybe with or without braces arround
}

person Klaus    schedule 26.06.2017    source источник
comment
Вы можете сделать auto f() -> std::tuple<int,double>.   -  person NathanOliver    schedule 26.06.2017
comment
Как сказал Натан, начиная с C++11, любая потребность в специальных агрегатах удовлетворяется.   -  person StoryTeller - Unslander Monica    schedule 26.06.2017


Ответы (1)


У вас не может быть такой конструкции, как

auto f() -> [int,double]

так как там нет информации о типе. Завершающий возврат предполагает наличие идентификатора_типа, который определяется как абстрактный-декларатор типа-specifier-seqopt.

Поскольку вам нужно указать тип в возвращаемом типе, вы можете использовать что-то вроде

auto f() -> std::tuple<int,double>

чтобы указать, что вы хотите вернуть int и double.

Также обратите внимание, что структурированные привязки могут использоваться в классах с общедоступными элементами данных, такими как кортежи объекты и массивы.

person NathanOliver    schedule 26.06.2017