使用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相关的问题,我对它很陌生,我先潜入一个较为困难的图书馆。
感谢。
答案 0 :(得分:1)
我认为您需要使用cdecl_cc
以及boost::function_types namespace
来限定#include <boost/function_types/property_tags.hpp>
。
Boost很棒,但文档有时可能会模糊不清。我认为他们倾向于把它写成标准的一部分,所以命名空间是隐含的。但除非另有说明,否则您应该假设所有内容都在某个命名空间中,boost
或更具体的命名空间。