如何使用BOOST获取调用约定的函数?

时间:2011-12-03 08:22:36

标签: c++ boost calling-convention

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

这是他们问题的链接:function calling convention with 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;
    }

另一个用户声称通过添加一个include来boost / function_types / config / config.hpp并通过定义BOOST_FT_COMMON_X86_CCs,问题就解决了 - 但它还没有解决我的问题。

我也尝试将包含和定义放在预编译头文件中。

查看config.hpp我看到cc_names.hpp的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相关的问题,我对它很陌生,我先潜入一个较为困难的图书馆。

感谢。

1 个答案:

答案 0 :(得分:1)

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

Boost很棒,但文档有时可能会模糊不清。我认为他们倾向于把它写成标准的一部分,所以命名空间是隐含的。但除非另有说明,否则您应该假设所有内容都在某个命名空间中,boost或更具体的命名空间。