是否可以使用不同类型的模板结构数组
Is it possible to have a template struct array with different types?
我不完全确定如何表达这个问题,但快速解释如下:我想要一个有描述的数据结构,然后是一组可以是任何数据类型的属性。
例如:
template <class T>
struct attributeStruct
{
std::string name;
T *value;
};
然后是一个以以下方式使用它的结构:
struct dataStructure
{
std::string name;
std::string description;
std::string type;
attributeStruct<...> **attribute
};
在我不想要的地方。。。为固定类型,但随着不同属性的添加而添加。
这可能吗?
这个怎么样?
template <class T>
struct dataStructure
{
std::string name;
std::string description;
std::string type;
attributeStruct<T> **attribute;
};
编辑:所以你想要一个异构的属性数组。我建议一种变体类型,比如:
struct dataStructure
{
std::string name;
std::string description;
std::string type;
std::vector<boost::variant<attributeStruct<int>, attributeStruct<double> > > **attribute;
};
变体<>中可以有许多类型,使用的variant类可以将它们中的任何一个存储在向量的每个"槽"中。
简短的回答-如您所示,使用模板是不可能的。模板类之间没有任何关系。
为了拥有不同类的列表(数组、映射等等),您应该使用继承。
基类可以具有(虚拟)函数,如getName()。getValue()函数是一个问题,因为基类不知道值的类型,所以需要首先将基指针强制转换为派生类指针。如果在基类中声明至少一个虚拟函数,则可以安全地使用dynamic_cast<>()强制转换为派生类(例如,从全局getAttributeValue()函数。
好吧,这个问题很老,有已知的解决方案。这取决于您根据当前需求判断利弊:
- boost::any或boost::variant的数组(或容器)
- 基于枚举的编码(注册类型的一个id),因此您有枚举值和PVOID作为稍后要解析的实际数据
- 将可能的类型列表限制为"安全类型",就像OLE Automation所做的那样
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组