从参数包创建不同的参数包

Create a different Parameter Pack from a Parameter Pack

本文关键字:参数 创建 包创建      更新时间:2023-10-16

我不确定我到底想做什么,所以如果标题不合适,请原谅我。

我有一个采用模板参数包的类模板。我希望构造函数根据参数包中的类型期望类型,更具体地说,我想将每个参数包元素传递给另一个类模板(采用一个参数)来构造构造函数参数。

所以这是我开始的结构:

template<class ElementType>
struct ElementPreset{
//... stores a preset for an element of ElementType
};
template<class... Elements>
class WidgetPreset{
    WidgetPreset(ElementPreset<Elements...> pPresets)
        :presets(pPresets){}
    std::tuple<ElementPreset<Elements...>> presets;
}

上面的代码不起作用,但我正在尝试做的是从Elements创建一个新的参数包,其中每个元素都是ElementPreset<Element>而不是Element

C++中是否有任何语言支持?

也许

template <typename ... Elements>
struct WidgetPreset{
    WidgetPreset(ElementPreset<Elements> ... pPresets)
        :presets(pPresets...){}
    std::tuple<ElementPreset<Elements>...> presets;
};

我的意思是。。。

(1)当你创建一个class时,如果你不publicprotected定义它,一切都private;所以你的class构造是private

(2)A ElementPreset<Elements...> pPresets错误:ElementPreset只接收一个类型;你必须在类型:ElementPreset<Elements> ... pPresets之后打开包装

(3)元组的问题相同:std::tuple<ElementPreset<Elements>...>,而不是std::tuple<ElementPreset<Elements...>>

(4)当你初始化preset你必须扩展包:presets(pPresets...)(或presets{pPresets...}),而不是presets(pPresets)

(5)记住struct末尾的;(或class