我正在做一个项目,它要求我创建非同类数组的数组。
假设数组是“arr”。
Then arr[0] might be array of integers, arr[1] might be array of strings, etc.
为此,我使用了指针。 我有一个基类:
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();
}
}
但是我遇到了段错误(或类似的错误)。我猜这个问题是由于两种不同类型的指针指向同一个对象,而“输入”函数只在其中一个中有意义。
我该如何解决这个问题?如果没有这些容易出错的指针,有没有其他方法可以实现我的想法?
最佳答案
这样做的一个选择是使用 Boost Variant C++ 库中适当定义的 Variant 类型作为数组元素。
Variant 的 Boost 文档可用 at this link
在该链接的基本教程中描述了如何使用 Boost Variants 的 std::vector。
关于c++ - 指针数组和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091934/