使用 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_cc
与 boost::function_types namespace
, 还有 #include <boost/function_types/property_tags.hpp>
.
Boost 很棒,但文档有时会很晦涩。我认为他们倾向于将其编写为标准的一部分,因此命名空间是隐式的。但除非另有说明,否则您应该假设所有内容都在某个命名空间中,boost
或更具体的。
关于c++ - 如何使用 BOOST 获取函数调用约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366482/