如何使用BOOST获得函数调用约定



使用BOOST,我试图获得函数的调用约定,为此,我采取了与发布相同问题的个人类似的方法,但他们的解决方案并没有解决我的问题。

以下是他们问题的链接:函数调用约定与boost::function_types

我曾尝试使用类似的方法获取调用约定,但遇到编译器错误,抱怨没有定义"cdecl_cc"。以下是我的代码的一小段:

#define BOOST_FT_COMMON_X86_CCs 1
#include <boost/function_types/config/config.hpp>
#include <boost/function_types/is_function.hpp>
    static bool isCdecl()
    {
        if(boost::function_types::is_function<T, cdecl_cc>::value == true)
            return true;
                return false;
    }

另一位用户声称,通过在boost/function_types/config/config.hpp中添加include并定义boost_FT_COMMON_X86_Cs,问题就解决了,但它并没有解决我的问题。

我也尝试过将includes和定义放在预编译头中。

查看config.hpp,我看到cc_names.pp的include,它列出了类似的定义

#define BOOST_FT_BUILTIN_CC_NAMES 
  (( IMPLICIT           , implicit_cc , BOOST_PP_EMPTY                ))
  (( CDECL              , cdecl_cc    , BOOST_PP_IDENTITY(__cdecl   ) ))
  (( STDCALL            , stdcall_cc  , BOOST_PP_IDENTITY(__stdcall ) ))
  (( PASCAL             , pascal_cc   , BOOST_PP_IDENTITY(pascal    ) ))
  (( FASTCALL           , fastcall_cc , BOOST_PP_IDENTITY(__fastcall) ))
  (( CLRCALL            , clrcall_cc  , BOOST_PP_IDENTITY(__clrcall ) ))
  (( THISCALL           , thiscall_cc , BOOST_PP_IDENTITY(__thiscall) ))
  (( IMPLICIT_THISCALL  , thiscall_cc , BOOST_PP_EMPTY                )) 

我不知道应该如何解释这样的定义,如果有人能向我解释,我可能会想出如何解决我的问题。

很抱歉我提出了所有与BOOST相关的问题,我对它还很陌生,我正在深入其中一个更难的库。

谢谢。

我认为您需要用boost::function_types namespace#include <boost/function_types/property_tags.hpp>来限定cdecl_cc

Boost很好,但文档有时可能很模糊。我认为他们倾向于把它当作标准的一部分来写,所以名称空间是隐含的。但是,除非另有规定,否则您应该假设所有内容都在某个命名空间中,要么是boost,要么是更具体的命名空间。

最新更新