我不确定我到底想做什么,所以如果标题不合适,请原谅。
我有一个采用模板参数包的类模板。我希望构造函数根据参数包中的类型期望类型,更具体地说,我想将每个参数包元素传递给另一个类模板(采用一个参数)来构造构造函数参数。
所以这是我开始的结构:
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
如果你不定义它 public
或 protected
;所以你的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/