【问题标题】:Arrays of pointers and type conversions指针数组和类型转换
【发布时间】:2014-08-02 05:17:50
【问题描述】:

我正在做一个需要我创建非同构数组的数组的项目。

假设数组是“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();
        }
}

但是我遇到了分段错误(或类似的错误)。我猜这个问题是由于两种不同类型的指针指向同一个对象,而“输入”函数只对其中一个有意义。

我该如何解决这个问题?没有这些容易出错的指针,还有其他方法可以实现我的想法吗?

【问题讨论】:

  • 谷歌c++歧视联合
  • 我得到了与工会相关的结果。 “歧视性工会”是“工会”的不同形式吗?
  • 是的,它是一个联合以及一个单独的字段,可让您了解联合值的当前类型。查看我投票最多的答案:stackoverflow.com/questions/18577404/…

标签: c++ class pointers object mingw


【解决方案1】:

这样做的一个选择是使用 Boost Variant C++ 库中适当定义的 Variant 类型作为数组元素。

Variant 的 Boost 文档可在 at this link 获得

在该链接的基本教程中有关于如何使用 Boost Variants 的 std::vector 的描述。

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2021-09-20
    • 2012-06-07
    • 2022-08-19
    相关资源
    最近更新 更多