使用BOOST,我试图获得函数的调用约定,为此,我采取了与发布相同问题的个人类似的方法,但他们的解决方案并没有解决我的问题。
以下是他们问题的链接:函数调用约定与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_Cs,问题就解决了,但它并没有解决我的问题。
我也尝试过将includes和定义放在预编译头中。
查看config.hpp,我看到cc_names.pp的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相关的问题,我对它还很陌生,我正在深入其中一个更难的库。
谢谢。
我认为您需要用boost::function_types namespace
和#include <boost/function_types/property_tags.hpp>
来限定cdecl_cc
。
Boost很好,但文档有时可能很模糊。我认为他们倾向于把它当作标准的一部分来写,所以名称空间是隐含的。但是,除非另有规定,否则您应该假设所有内容都在某个命名空间中,要么是boost
,要么是更具体的命名空间。