2009-09-04 6 views
1

Je viens d'expérimenter avec la bibliothèque boost :: function_types récemment, et j'ai rencontré un peu d'accroc. Je veux trouver la convention d'appel d'une fonction donnée, mais je ne suis pas tout à fait sûr de savoir comment faire cela. Voici ce que j'ai pour le moment:Fonction appel convention avec boost :: function_types

Cela produit une erreur sur la façon dont il ne peut pas trouver les valeurs de balises * _cc dans chaque instruction if. Je soupçonne que cela puisse avoir quelque chose à voir avec la façon dont je définis les macros; la documentation n'est pas très claire sur la façon de configurer des conventions d'appel supplémentaires avec votre compilateur ... Toute aide ici serait appréciée.

Merci,

ÉDITÉ: a fonctionner, semble comme si je devais inclure config/config.hpp, comme ci-dessous:

#define BOOST_FT_COMMON_X86_CCs 1 
#include <boost/function_types/config/config.hpp> 
#include <boost/type_traits.hpp> 
#include <boost/function_types/property_tags.hpp> 
#include <boost/function_types/is_function.hpp> 
#include <boost/function_types/is_function_pointer.hpp> 
#include <boost/function_types/parameter_types.hpp> 
#include <boost/function_types/result_type.hpp> 
#include <boost/function_types/function_arity.hpp> 

template<class F> 
inline void parse_cc(F f, func_info_s& out) { 
    out.cc = cc_err; 
    if (boost::function_types::is_function<F, stdcall_cc>::value == true) { 
     out.cc = cc_stdcall; 
    } else if (boost::function_types::is_function<F, fastcall_cc>::value == true) { 
     out.cc = cc_fastcall; 
    } else if (boost::function_types::is_function<F, cdecl_cc>::value == true) { 
     out.cc = cc_cdecl; 
    } 
} 
+0

Pourriez-vous ajouter votre modification en tant que réponse, afin que la question soit correctement acceptée? Merci! –

+0

J'ai modifié mon message pour refléter le code correct, fonctionnel (sans jeu de mots) – Exponent

+0

Vous devriez publier votre solution comme une réponse, puis l'accepter. – GManNickG

Répondre

0

Il semble que je manque tout simplement l'un des fichiers d'en-tête (config/config.hpp)

#define BOOST_FT_COMMON_X86_CCs 1 
#include <boost/function_types/config/config.hpp> 
#include <boost/type_traits.hpp> 
#include <boost/function_types/property_tags.hpp> 
#include <boost/function_types/is_function.hpp> 
#include <boost/function_types/is_function_pointer.hpp> 
#include <boost/function_types/parameter_types.hpp> 
#include <boost/function_types/result_type.hpp> 
#include <boost/function_types/function_arity.hpp> 

template<class F> 
inline void parse_cc(F f, func_info_s& out) { 
    out.cc = cc_err; 
    if (boost::function_types::is_function<F, stdcall_cc>::value == true) { 
     out.cc = cc_stdcall; 
    } else if (boost::function_types::is_function<F, fastcall_cc>::value == true) { 
     out.cc = cc_fastcall; 
    } else if (boost::function_types::is_function<F, cdecl_cc>::value == true) { 
     out.cc = cc_cdecl; 
    } 
}