У меня есть базовый класс с чистой виртуальной функцией:переопределения виртуальной функции с шаблонным функции
class Allocator
{
public:
template< class T >
virtual T* allocate(T type) = 0;
};
с производным классом с шаблонной функцией, дизайн намерением было переопределить эту виртуальную функцию:
class StackAllocator: public Allocator
{
public:
StackAllocator(size_t size, void* stackStart = nullptr);
template< class T>
T* allocate(T Type);
};
Мое намерение проекта заключалось в том, чтобы выделить приоритет выделения в Allocator. Но, очевидно, после прочтения этого, я нашел код выше не будет работать.
Я нашел много решений, которые включают в себя создание самого класса шаблона, но в этой ситуации я не могу этого сделать, поскольку сам StackAllocator должен быть агрегированным по типу при компиляции. И только функция должна иметь дело с различными типами.
Я нашел работу вокруг, которая включала класс распределения, который использовался на основе распределения, который касался самого распределения, но это казалось расточительным и не очень ясным в его приложении, поэтому теперь я застрял просто избавляясь от виртуальной функции и используя только шаблонную функцию производного класса.
Любые идеи, как я мог это сделать? или идеи о том, как переделать мой дизайн? (имейте в виду, что я в конечном итоге сделаю много других производных распределителей, чтобы база была необходима.)
Спасибо!
g ++: ошибка: шаблоны могут быть не «виртуальными» –
@ DieterLücking, это все, за чем он задал вопрос. он заявил, что знает, что код, который он опубликовал, не может работать. – xaxxon
, поэтому что-то должно знать тип, который он хочет выделить - либо шаблон класса, либо шаблонный метод в этом классе. Какой смысл иметь виртуальную функцию вообще? это звучит как хороший метод/функция фабрики ванили. Некоторые примеры того, как вы думаете, что будете использовать это, если это сработает, будут полезны. Кроме того, наличие чего-то, возвращающего определенный тип, требует чего-то, чтобы принять этот конкретный тип, поэтому вы не можете просто вызвать это в общем ... – xaxxon