Я работаю над куском кода и уже довольно давно бьюсь головой о стену пословиц. Я новичок во всей концепции шаблонов и поэтому буду признателен за любую помощь, которую я могу получить по следующей проблеме:
Я пытаюсь построить построитель объектов, который принимает в качестве аргумента распределитель:
class Allocator {
public:
allocate(unsigned int size, unsigned int alignment);
template <class T>
T* allocate_object() { return allocate(sizeof(T), alignof(T)); }
};
template <class ALLOCATOR>
class Builder {
public:
Builder(ALLOCATOR& a) : a(a) {}
void build_something() {
int* i = a.allocate_object<int>();
}
private:
ALLOCATOR& a;
};
Когда я пытаюсь вызвать функцию build_something с помощью моего распределителя, я получаю следующую ошибку компиляции: "error: ожидаемое первичное выражение перед int"
Распределитель работает сам по себе, как и предполагалось, но не может использоваться в качестве аргумента шаблона, как в примере. Итак, есть ли что-то, что я могу сделать, чтобы исправить это без необходимости удалять функцию шаблона в распределителе?
Предпочтительно, я бы хотел использовать полиморфизм для отправки объекта распределителя (базовый класс)
указатель на конструктор, но, очевидно, вы не можете иметь функции виртуального шаблона. :)
Спасибо за время! :)
-Maigo