Можно ли инициализировать член класса (или вызвать конструктор суперкласса), используя аргументы, содержащиеся в кортеже?Обратите внимание, что мне известны std::make_from_tuple()
и std::apply()
, но они не могут использоваться в этом сценарии.
Рассмотрим sometype
не копируемый, не конструируемый по умолчанию, не подвижный, не назначаемый, ничего другого.Единственный способ его создания - использование аргументов, представленных как std::tuple
.Можно ли это сделать?
Моя попытка не удалась, поскольку «шаблон расширения не содержит пакет аргументов», хотя генерируемая index_sequence должна быть равна единице.
class node {
public:
sometype value;
template <typename... Args>
explicit node(const std::tuple<Args...>& args_tuple) :
value(
std::get<
std::index_sequence_for<Args...>{}
>(args_tuple)...
) {
}
};