Общий класс для динамических массивов в C ++ - PullRequest
1 голос
/ 10 ноября 2011

Можно ли создать универсальный класс, который действует как динамический массив объектов любого типа? Я хочу класс, который в основном делает это:

MyObj * obj1 = new MyObj();
MutableArray * arr = new MutableArray();
arr->addObject(obj1);
MyObj * obj2 = arr->objectAtIndex(0);
// obj1 and obj2 now points to the same object

Вот как будет выглядеть код. Я знаю, что это не работает, но вы поняли. Что мне нужно, это какой-то общий тип для объекта. Сам массив состоит только из указателей, поэтому размер объекта не должен иметь значения, верно?

Итак, возможно ли это?

.h-файл

class MutableArray
{
    private:
        class * objs;
        int length;
        int capacity;

    public:
        MutableArray();
        void add(class * obj);
        class objectAtIndex(int index);
};

СРР-файл

MutableArray::MutableArray()
{
    length = 0;
    capacity = 0;
}

void MutableArray::add(class * obj)
{
    if(length >= capacity)
    {
        this->enlarge();
    }
    objs[length] = obj;
    length++;
}

void MutableArray::enlarge()
{
    int newCapacity = (capacity * 2)+1;
    class * newObjs = new class[newCapacity]

    if(capacity != 0)
    {
        delete [] objs;
    }

    objs = newObjs;
    capacity = newCapacity;
}

class MutableArray::objectAtIndex(int index)
{
    return objs[index];
}

Ответы [ 4 ]

5 голосов
/ 10 ноября 2011

Это уже изобретено и называется std::vector<>.

3 голосов
/ 10 ноября 2011

Можно ли создать универсальный класс, который действует как динамический массив объектов любого типа?

Для динамического массива используйте std::vector, для объектов любого типа используйте boost::any.

std::vector< boost::any > anything;
2 голосов
/ 10 ноября 2011

Вы хотите использовать STL std::vector.

1 голос
/ 10 ноября 2011

Да.На самом деле он существует и называется std::vector.

...