2010-11-03 4 views
3

Le code suivant ne compile pas ... une idée pourquoi? Est-ce C++ illégal?Comment pouvez-vous obtenir un pointeur vers une fonction membre modélisée à partir d'un type de modèle?

class Handler { 
public: 
    template <typename T> 
    void handle(T t) {}  
}; 

class Initializer { 
public: 
    template <typename T, typename H> 
    void setup(H *handler) { 
    void (H::*handle)(T) = &H::handle<T>; // fails 
    } 
}; 

int main() { 
    Initializer initializer; 
    Handler handler; 
    initializer.setup<int, Handler>(&handler); 
} 

Répondre

3

Vous devez template:

void (H::*handle)(T) = &H::template handle<T>; 

Parce que le modèle handle est qualifié avec un type dépendant. (Tout comme vous utilisez typename si un type est qualifié avec un type dépendant.)

Questions connexes