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

C++ 如何使用BOOST获得函数调用约定?,c++,boost,calling-convention,C++,Boost,Calling Convention,使用BOOST,我试图获得函数的调用约定,为此,我采取了与发布相同问题的个人类似的方法-但是他们的解决方案并没有解决我的问题 以下是他们问题的链接: 我曾尝试使用类似的方法获取调用约定,但遇到编译器错误,抱怨没有定义“cdecl_cc”。下面是我的一小段代码: #define BOOST_FT_COMMON_X86_CCs 1 #include <boost/function_types/config/config.hpp> #include <boost/function_t

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

以下是他们问题的链接:

我曾尝试使用类似的方法获取调用约定,但遇到编译器错误,抱怨没有定义“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相关的问题,我对它还比较陌生,我正在一头扎进一个更难的库中


谢谢。

我相信您需要使用
boost::function\u-types命名空间
以及
\include
来限定
cdecl\u-cc


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

boost\u FT\u BUILTIN\u CC\u NAMES
是一个元组序列。序列和元组用于Boost.Preprocessor库的代码生成。在某个地方使用了这个宏,可能是在每个的
BOOST\u PP\u SEQ\u中(它迭代序列的元素)或它的一个朋友。我怀疑您需要使用适当的名称空间(BOOST::function\u类型)来限定cdecl\u cc。您可能还需要
#包括
@AlanStokes我不知道我必须使用boost::function_-types名称空间,因为我觉得它只是一个简单的定义-站点上的示例似乎还假设您已经在名称空间中。不管怎样,你的解决方案奏效了。谢谢:)如果你能把它贴在下面,我会把它标记为答案,如果不能,我不介意自己做。stackoverflow上另一个问题的链接让我很困惑,因为他们的示例通过function_types名称空间显式访问is_函数,而as然后访问_cdecl,就好像它已经存在于他们的名称空间中一样。
#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                ))