2010-07-16 4 views
2

J'essaie de comprendre comment de nombreuses classes boost pourraient accepter une signature de fonction comme argument de modèle et ensuite "extraire" de là le type de résultat, le premier type d'argument et ainsi de suite. Je sais que boost fournit également une implémentation plus portable, en utilisant un argument template pour chaque argument de la fonction et c'est facile à comprendre. Quelqu'un peut-il m'expliquer la magie au-delà de ça?La question boost "signature"

+0

Vous voulez dire, vous voulez savoir comment [ 'function_traits'] (http://www.boost.org/doc/libs/1_43_0/libs /type_traits/doc/html/boost_typetraits/reference/function_traits.html) est implémenté? – kennytm

+0

@Kenny: Note de côté, mais j'ai juste passé mon temps à travailler sur mon propre 'function_traits' et je terminais juste, et maintenant j'ai découvert que Boost l'a. Devrait de connu. .-. – GManNickG

+0

@KennyTM: Fondamentalement, oui :) – Emiliano

Répondre

6

Au cœur de sa juste spécialisation et répétition:

template<class S> struct Sig; 

template<class R> struct Sig<R()> { 
    typedef R result_type; 
}; 

template<class R, class T0> struct Sig<R (T0)> { 
    typedef R result_type; 
    typedef T0 first_type; 
}; 

// ... 
+0

En regardant function_traits.hpp je peux totalement voir votre point – Emiliano

Questions connexes