2016-11-18 1 views
1

Étant donné ce code:C la simplification de la signature de 11 méthode liée

#include <iostream> 
#include <functional> 

template<typename T> 
void f(T t1, T t2) { std::cout << t1 << " " << t2 << std::endl; } 

template<typename...Ts> 
void g(Ts... ts) { f(ts...); } 

int main() { 
    auto f = std::bind(g<int, int>, 1, 2); 
    f(); 
    return 0; 
} 

Est-il possible d'ignorer la spécification du type de modèle pour g dans std::bind(g<int, int>, 1, 2)?

Sinon, est-il au moins possible de spécifier le type une seule fois? c'est-à-dire std::bind(g<int>, 1, 2)

Voici un live version de ceci.

+0

Il ne change pas beaucoup, mais vous pouvez utiliser 'std :: bind (static_cast (g), 1, 2);'. La spécification des types de modèles a disparu. :-) – skypjack

Répondre

3

Je ne sais pas s'il est possible de se lier, mais vous obtenez même fonctionnalité avec un lambda, et pas besoin de params modèles explicites:

auto f = []{ 
    g(1, 2); 
}; 
+0

Bien sûr. J'insistais pour me lier correctement mais je n'en ai surtout pas besoin. Un lambda fonctionne très bien. Merci! – eldruin