c++ - 指针数组和类型转换

标签 c++ class pointers object mingw

我正在做一个项目,它要求我创建非同类数组的数组

假设数组是“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/

相关文章:

c++ - 如何在扩展 QTreeWidgetItem 而不是 QTreeWidget 上调用 SLOT?

c++ - 使用 Asio::read 读取单字节

java - 泛型类型出现问题 - Java

c - 无法理解指针语句

c - Scanf 字符串并设置指针

c++ - C+ : Destructor for same instance of an object called twice

c++ - 使用 ffmpeg 添加元数据信息

c++ - 在 STL 中使用 void* 作为固定宽度的记录

Java Class.cast() 和重载

php - 我如何在我的其他 CodeIgniter Controller 中使用 __construct 函数