gpt4 book ai didi

c++ - 如何将元组的值转发给成员初始化程序?

转载 作者:行者123 更新时间:2023-12-03 11:15:05 25 4
gpt4 key购买 nike

我需要将元组的值转发给成员初始化器:

struct Struct {
Member1 member1;
Member2 member2;

template<typename Tuple1, typename Tuple2>
Struct( Tuple1&& tuple1, Tuple2&& tuple2 )
: member1(tuple1...), member2(tuple2...)
{}
};

上面的代码显然是无效的。怎么表达?

Member1Member2 没有默认/复制/移动构造函数。

我知道 std::apply,正如 How do I expand a tuple into variadic template function's arguments? 中所建议的那样.我也知道 std::make_from_tuple。但我不知道如何在成员初始化程序中使用这些。

任何 C++ 标准都可以(最好是 C++17,但 C++20 也可以)。

澄清一下,我的真正目标是创建一个 Struct,将两组可变参数传递给它以完美转发它们以初始化 member1member2。我认为将这两个集合“分组”为元组可能是一个好主意,因为这就是 std::map::emplace 所做的。其他方法也可以(例如,在两组可变参数之间传递一个特殊对象)。

最佳答案

std::make_from_tuple 确实是正确的选择:

#include <tuple>
struct Member1 {
Member1(int x,float y, char z){}

Member1(const Member1& other)=delete;
Member1(Member1&& other)=delete;
};

struct Member2 {
Member2(int x,float y, char z){}

Member2(const Member2& other)=delete;
Member2(Member2&& other)=delete;
};

struct Struct {
Member1 member1;
Member2 member2;

template<typename Tuple1, typename Tuple2>
Struct(Tuple1&& tuple1, Tuple2&& tuple2)
: member1(std::make_from_tuple<Member1>(std::forward<Tuple1>(tuple1))),
member2(std::make_from_tuple<Member2>(std::forward<Tuple2>(tuple2)))
{}
};

int main(){
Struct c(std::tuple{1,1.1,'c'},std::tuple{2,2.2,'x'});
}

Godbolt demo .

关于c++ - 如何将元组的值转发给成员初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65443904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com