Ошибка компиляции, связанная с функцией шаблона - PullRequest
2 голосов
/ 21 апреля 2011

Я работаю над куском кода и уже довольно давно бьюсь головой о стену пословиц. Я новичок во всей концепции шаблонов и поэтому буду признателен за любую помощь, которую я могу получить по следующей проблеме:

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

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

1 Ответ

3 голосов
/ 21 апреля 2011
    int* i = a.template allocate_object<int>();

Шаблон C ++ получил

...