我不完全确定如何说出问题,但快速解释如下: 我想要一个包含其描述的数据结构,然后是一堆可以是任何数据类型的属性。
例如:
template <class T>
struct attributeStruct
{
std::string name;
T *value;
};
然后是一个以下列方式使用它的结构:
struct dataStructure
{
std::string name;
std::string description;
std::string type;
attributeStruct<...> **attribute
};
我不希望...是固定类型,但是在添加不同属性时添加。
这可能吗?
答案 0 :(得分:1)
这个怎么样?
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;
};
您可以在变体&lt;&gt;中使用多种类型,并使用变体类将任何类型存储在向量的每个“插槽”中。
答案 1 :(得分:0)
嗯,这个问题很老,而且已知解决方案。这取决于您根据当前需求判断利弊:
答案 2 :(得分:0)
简短回答 - 您无法使用模板显示它们。 模板类彼此没有关系。
为了获得不同类的列表(数组,映射等),你应该使用继承。
基类可以具有(虚拟)函数,如getName()。 getValue()函数是一个问题,因为基类不知道值的类型,您需要首先将基指针强制转换为派生类指针。如果在基类中声明至少1个虚函数,则可以安全地使用dynamic_cast&lt;&gt;()转换为派生类(例如,从全局getAttributeValue()函数。