Наследование и шаблонный метод в переполнении стека

Я застрял в проблеме зачатия в C ++:

Я сделал шаблонный класс Pool, который делает в основном то же самое, что и std :: list, но хранит только объекты и вызывает сам конструктор с размещением new и деструктором хранимого объекта.

Затем я создал класс ObjectAllocator, который имеет метод шаблона getObjectWithClass. Я хочу, чтобы этот класс был похож на интерфейс, поэтому у меня может быть подкласс PoolObjectAllocator, который действует как мост между ObjectAllocator и шаблоном класса Pool.

Но нет способа создать getObjectWithClass как виртуальный, потому что это метод шаблона.

template <class T>
class Pool {
...
public:
T& getFreeObject();
...
}

class ObjectAllocator {
public:
template <class T> T* getObjectWithClass(); // I need this method to be virtual
};

class PoolObjectAllocator : public ObjectAllocator {
std::map<int, void *> pools;

public:
template <class T> T* getObjectWithClass() {
int type = T::GetType();

Pool<T> *pool;
if (this->pools.find(type) == this->pools.end()) {
pool = new Pool<T>();
pools[type] = pool;
} else {
pool = static_cast<Pool<T> *>(pools[type]);
}

return &pool->getFreeObject();
};
};

// Later in the program :
ObjectAllocator *objectAllocator = myObject.getObjectAllocator();
objectAllocator->getObjectWithClass<OneClass>();

// Because the above line call a non virtual method, the method called is ObjectAllocator::getObjectAllocator and not PoolObjectAllocator::getObjectAllocator even if the objectAllocator is a PoolObjectAllocator.

Я не могу найти способ заставить это работать, кто-нибудь может мне помочь? Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector