我正在做一个项目,要求我 创建非同类数组 。
假设数组是“arr”。
然后arr [0]可能是整数数组,arr [1]可能是字符串数组等。
为此,我使用指针。 我有一个基类:
class base_class;
然后我有一个模板类
template<typename T>
class temp_class : public base_class{
private:
T* ptr;
.....
public:
void input(){
//do something}
};
现在我定义了类arr。
class arr{
private:
base_class* ptr;
....
public:
void take_data(){
temp_class<int>* temp;
temp = static_cast<temp_class<int>*> (ptr)//OR (ptr+1)
temp->input();
}
}
但我得到了一个分段错误(或类似的东西)。我猜这个问题是由于两个不同类型的指针指向同一个对象,而“输入”函数只在其中一个指针中有意义。
我该如何解决这个问题?有没有其他方法可以实现我的想法,没有这些容易出错的指针?
答案 0 :(得分:1)
执行此操作的一个选项是使用Boost Variant C ++库中适当定义的Variant类型作为数组元素。
Variant的Boost文档可用at this link
在该链接的基础教程中有一个如何使用std :: vector of Boost Variants的描述。