c++ - 对任意数量的类使用可变参数模板参数
问题描述
我有一种情况,我需要一个FaceProp
为实际面部类型维护/持有其他类的类。这些可以是任何类型的面,如边界面、实体面、内部面等。我想FaceProp
使用 C++ 中的可变参数包功能来实现,但我不确定如何实现。
我正在尝试以下主要课程
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;
如何最好地做到这一点?
解决方案
如何std::tuple
按照评论中的建议执行此操作的示例。我展示了它有和没有std::unique_ptr
。
template <typename... FaceTypes>
class FaceProp
{
FaceProp() {
m_tuple = {FaceTypes()...};
m_uniqueTuples = {std::make_unique<FaceTypes>()...};
}
private:
std::tuple<FaceTypes...> m_tuple;
std::tuple<std::unique_ptr<FaceTypes>...> m_uniqueTuples;
};
代码中的...
扩展了关联的表达式以包含参数包中的每种类型。因此,FaceProp<int, double>
扩展为:
class FaceProp
{
FaceProp() {
m_tuple = {int(), double()};
m_uniqueTuples = {std::make_unique<int>(), std::make_unique<double>()};
}
private:
std::tuple<int, double> m_tuple;
std::tuple<std::unique_ptr<int>, std::unique_ptr<double>> m_uniqueTuples;
};
推荐阅读
- c++ - CMake - 向 Makefile 添加选项
- string - 在尝试修复嵌套延迟扩展问题时,在函数的 else 情况下添加 for 循环导致的莫名其妙的行为
- winforms - 在调整窗体和窗口大小时在 winforms 上缩放控件
- java - Android 电子邮件和密码验证应用程序崩溃
- reporting-services - SSRS 2008 钻取参数过滤 >= 不工作
- oracle - 如何在不使用 @ 符号连接数据库的情况下连接数据库。调用 sqlplus UNAME@DBNAME/Password@\\Filelocation
- python - 在 CSV(数字)中查找特定字段值并将其转换为文本值
- haskell - Haskell - 如何使用递归将列表拆分为 n 个长子部分
- python - 如何在 Django 中将字符串转换为调用模型的名称?
- vba - VBA 进行随机计算并确认正确答案