gpt4 book ai didi

C++ 初始化继承的模板基类

转载 作者:行者123 更新时间:2023-11-30 00:43:50 24 4
gpt4 key购买 nike

我试图在构造期间将任意参数传递给通过模板参数包继承的类。考虑这个例子:

struct Zero {
Zero() {}
};

struct Two {
Two(int, int) {}
};

template <class... Pack>
struct User : Pack... {
template <class... Params>
User(Params... p) : Pack(p)... {} // How to do this correctly?
};

auto test = User<Zero, Two>(1,2);

如果我现在尝试构造一个 User<Zero, Two> 类型的对象我怎样才能通过 Params到正确的构造函数?

最明显的解决方法是让元组构造函数为每种类型恰好采用一个元组 User可以接受,但这需要我修改 ZeroTwo ,这在我的用例中非常困难。

这可能吗?也欢迎其他可能的解决方法。

最佳答案

您需要让 User 构造函数接受一系列元组,然后将参数从每个单独的元组转发到相应的基类。

template <class... Tuples>
User(Tuples&&... t) : Pack(std::make_from_tuple<Pack>(std::forward<Tuples>(t)))... {}

请注意,由于有保证的复制省略,Pack... 类型的临时对象将不会被实例化。

Live on Coliru

关于C++ 初始化继承的模板基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52266369/

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