c++ - 从参数包创建不同的参数包

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

最佳答案

也许

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

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

我的意思是...

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

(2) 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)

关于c++ - 从参数包创建不同的参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147710/

相关文章:

c++ - 在 DLL 中运行的工作线程在应用程序关闭时被杀死,然后才能正常关闭它们

c++ - 从字符串文字中推导模板参数

c++ - 你什么时候使用 std::unordered_map::emplace_hint?

c++ - 所有整数值都完美地表示为 double 吗?

C++11:如何访问不同类型的 std::functions 的目标?

c++ - 第一个和最后一个窗口不显示

c++ - 对象集的排序不正确

c++ - 是否可以用 C++ 编写不纯的模板?

c++ - 使用参数包作为模板类的类型名

python - 找到较低级别的模板