2011-04-20 2 views
2

Je travaille sur un morceau de code et je me suis cogné la tête contre le mur proverbial depuis un certain temps maintenant. Je suis un peu nouveau dans le concept de modèles et pourrait donc apprécier toute aide possible sur le problème suivant:Erreur de compilation liée à la fonction de modèle

Je suis en train de construire un constructeur d'objet qui prend un allocateur comme argument en tant que tel:

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; 
}; 

Quand je tente d'appeler la fonction « build_something » avec mon allocateur je reçois l'erreur de compilation suivante: « erreur: l'expression primaire attendue avant « int » »

l'allocateur travaille seul comme prévu mais ne peut pas être utilisé comme argument de modèle comme dans l'exemple. Alors, y a-t-il quelque chose que je peux faire pour résoudre ce problème sans avoir à laisser tomber la fonction de gabarit dans l'allocateur?

De préférence j'aurais aimé utiliser le polymorphisme pour envoyer un pointeur d'allocateur (classe de base) au constructeur mais apparemment vous ne pouvez pas avoir de fonctions de modèle virtuel. :)

Merci pour le temps! :) -Maigo

Répondre

3
int* i = a.template allocate_object<int>(); 

C++ template gotchas

+0

Plus bon matériel de lecture: [? Quel est le -> modèle, .template et :: syntaxe du modèle au sujet] (http://www.comeaucomputing.com/ techtalk/templates/# templateprefix) – ildjarn

Questions connexes