【发布时间】:2021-06-03 12:11:21
【问题描述】:
我有一种情况,我需要一个类 FaceProp 来维护/持有其他类的实际面部类型。这些可以是任何类型的面,例如边界面、实体面、内部面等。我想使用 C++ 中的可变参数包功能实现FaceProp,但我不确定如何实现。
我正在尝试以下主要课程
template<typename... FaceTypes>
class FaceProp
{
FaceProp(){
/// here construct all those template argument classes.
}
private:
// declare here the classes to the FaceTypes.
// e.g. If this class was declared with two face types I would have :
// std::unique_ptr<FaceType1> type1;
// std::unique_ptr<FaceType2> type2;
}
我不确定如何声明它们,因为在实施时我不知道我需要处理多少/以及哪些面部类型。这是通过编译时间知道的。换句话说,当我想声明 FaceProp 类时,我会知道要使用多少种面部类型
例如
std::unique_ptr<FaceProp<facetype1, facetype2>> allfaces;
如何做到最好?
【问题讨论】:
-
我觉得这个案例最好用interface解决。
-
但是
FaceTypes与FaceProp有什么关系?FaceProp继承自所有FaceTypes?FaceProp必须包含std::tuple<FaceTypes...>?还是std::variant<FaceTypes...>? -
std::tuple是要走的路。否则,您基本上需要重新实现元组,这并非易事。 -
@HolyBlackCat 你能详细说明一下吗?另外,你对可变参数模板参数有什么好的参考,感觉我不理解这个概念,我应该
标签: c++ templates variadic-templates parameter-pack