2015-03-13 4 views
3

J'ai cette classe de modèle:comment utiliser l'alias de modèle pour supprimer un paramètre unecessary

template<typename T, T F(const std::string&)> 
struct Builder 
{ 
    T operator()(const std::string& s) const { return F(s); } 
    typedef T type; 
}; 

depuis que je besoin d'une classe tenant une fonction et la valeur retournée par la fonction (puisque je besoin d'une référence à elle) .

Comme vous pouvez le voir, j'ai deux paramètres de modèle, mais en réalité le premier est redondant. Est-il possible de l'enlever d'une manière ou d'une autre? Alias ​​de modèle? Quelque chose de mieux qu'une macro

+2

Ceci est une question très courante, par ex. voir http://stackoverflow.com/q/10224392/981959 –

Répondre

3

Retour Type T du second paramètre de modèle doit être défini avant sa première utilisation de toute façon (comme la règle C++ stipule que toute entité peut être utilisée qu'après sa déclaration), et la seule façon de declare est d'utiliser le paramètre de modèle de type précédent (comme vous l'avez fait), donc vous ne pouvez pas omettre le premier paramètre.