c++ - 如何使用 BOOST 获取函数调用约定?

标签 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;
    }

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

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

查看 config.hpp 我看到 cc_names.hpp 的包含,它列出了这样的定义

#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 相关的问题,我深表歉意,我对它还很陌生,我正首先进入一个更困难的库。

谢谢。

最佳答案

我相信你需要符合条件 cdecl_ccboost::function_types namespace , 还有 #include <boost/function_types/property_tags.hpp> .

Boost 很棒,但文档有时会很晦涩。我认为他们倾向于将其编写为标准的一部分,因此命名空间是隐式的。但除非另有说明,否则您应该假设所有内容都在某个命名空间中,boost或更具体的。

关于c++ - 如何使用 BOOST 获取函数调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366482/

相关文章:

ios - Alamofire 中的调用约定,Alamofire.request

c# - 基于 x64 调用约定的 CLI 调用

c++ - 通过 ref 传递 const 指针比通过值传递更好?

c++ - clGetPlatformIDs 返回两个平台,但它们是相同的

c++ - c 操纵指向 char 数组的指针,混淆

c++ - 向 iOS 应用程序添加 64 位切片会导致崩溃

c++ - 如何将 ostream 重定向到 Boost Log 库

c++ - 除了模拟测试之外,无需额外使用接口(interface)即可编码到接口(interface)?

c++ - boost lambda : Invoke method on object

c - 在cdecl调用约定中,signed char和short如何作为参数传递