Мне нужно переслать значения кортежа инициализатору члена:
struct Struct {
Member1 member1;
Member2 member2;
template<typename Tuple1, typename Tuple2>
Struct( Tuple1&& tuple1, Tuple2&& tuple2 )
: member1(tuple1...), member2(tuple2...)
{}
};
Приведенный выше код явно недействителен. Как я могу это выразить?
Member1
и Member2
не имеют конструктора по умолчанию / копирования / перемещения.
Я знаю о std::apply
, как это предлагается в Как сделать Я разворачиваю кортеж в аргументы функции шаблона с переменным числом аргументов?. Я также знаю о std::make_from_tuple
. Но я бы не знал, как использовать что-либо из этого в инициализаторе члена.
Подойдет любой стандарт C ++ (желательно C ++ 17, но подойдет и C ++ 20).
Чтобы уточнить, моя настоящая цель - создать Struct
, передав ему два набора переменных аргументов, чтобы перенаправить их для инициализации member1
и member2
. Я подумал, что сгруппировать два набора в кортежи могло быть хорошей идеей, поскольку это то, что делает std::map::emplace
. Другие подходы также будут работать (например, передача специального объекта между двумя наборами вариативных аргументов).