c++ - 如何在 C++ 中创建类数组?

标签 c++ arrays

代码:

struct Base { ... };

struct A : public Base { ... };
struct B : public Base { ... };
struct C : public Base { ... };

是否可以创建一个包含该类型结构的数组? 示例/预期结果:

Type inheritedTypesOfStruct[3] = {A, B, C};

这样做的目的是我以后想创建一个对象,其中包含从数组中检索到的随机类。

最佳答案

您可以创建一个函数数组,每个函数返回一个基指针(或智能指针),每个指针都指向您的各种派生类的对象。例如

typedef std::unique_ptr<Base> base_ptr;

template<typename Derived>
base_ptr CreateObject()
{
    return base_ptr(new Derived);
}

int main()
{
    std::function<base_ptr(void)> f[3] = {
        CreateObject<A>, CreateObject<B>, CreateObject<C>
    };

    base_ptr arr[10];
    for (int i=0; i<10; ++i)
        arr[i] = f[rand()%3]();
}

它正在运行:http://ideone.com/dg4uq

关于c++ - 如何在 C++ 中创建类数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702649/

相关文章:

c++ - 需要帮助破译 gprof 输出

c++ - 使用 CocosDenshion 按顺序播放声音?

c++ - JOYBUTTON_5 是否在 mmsystem.h 中错误定义?

c++ - 命名空间内与类内的函数作用域

循环内的Javascript变量未定义

php - 如何将包含数组的 JSON 表迁移到 SQL?

c - 警告 : array subscript is above array bounds [-Warray-bounds] when compiling using -O3 flag

javascript - 如何在 Javascript 中先按姓氏,然后按名字和中间名对姓名数组进行排序

c++ - 未实现赋值运算符时调用构造函数

java - 数9,为什么小于9?