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

时间:2017-11-06 23:43:40

标签: c++ c++11 templates parameters variadic-templates

我不确定我要做的是什么,所以如果标题不适合,请原谅。

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

所以这就是我开始的结构:

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 ++中是否有任何语言支持?

1 个答案:

答案 0 :(得分:3)

也许

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

    std::tuple<ElementPreset<Elements>...> presets;
};

我的意思是......

(1)当您创建class时,如果您没有定义privatepublic,则全部为protected;因此,您的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