Voici le code que je recherchais, Source code:Héritage Déroutant et modèles
template <typename T>
struct function_traits
: public function_traits<decltype(&T::operator())>
{};
si nous instancier certains foncteur X
-à-dire function_traits<X>;
, qui va construire la classe de base qui est function_traits<decltype(&X::operator())>
en raison de l'héritage, mais construire function_traits<decltype(&X::operator())>
sa base doit également être construit, ce qui pourrait être function_traits<decltype(Z)>
Je comprends function_traits<X>
! = function_traits<Z>
. N'est-ce pas un héritage récursif? 0_o. Comment tout fonctionne-t-il ensemble?
Que se passe-t-il lorsque vous essayez? –
Je ne comprends pas votre question. Ce code n'est pas valide sans une autre spécialisation de 'function_traits' pour les pointeurs de fonctions membres. – ildjarn
@FreakEnum: Oui, ce code contient les spécialisations exactes dont je parlais. ;]] – ildjarn