使用BOOST,我試圖獲得一個函數的調用約定,爲此我正在採用與發佈相同問題的個人類似的方法 - 但是他們的解決方案尚未解決我的問題。如何使用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;
}
其他用戶稱,通過添加包括推動/ function_types /配置/ config.hpp和定義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相關問題,我對它相當陌生,而且我首先潛入其中一個更困難的圖書館。
謝謝。
'BOOST_FT_BUILTIN_CC_NAMES'是_tuples_的_sequence_。序列和元組是由Boost.Preprocessor庫在代碼生成中使用的[預處理器數據結構](http://www.boost.org/doc/libs/1_48_0/libs/preprocessor/doc/)。在某個地方,這個宏可能用在'BOOST_PP_SEQ_FOR_EACH'(它遍歷序列的元素)或其朋友之一。 –
我懷疑你需要使用適當的命名空間(boost :: function_types)來限定cdecl_cc。你可能還需要''#include' –
@AlanStokes我不知道我必須使用boost :: function_types命名空間,因爲我的印象是它只是一個簡單的定義 - 網站上的例子似乎也假設你已經在命名空間中。無論如何,你的解決方案工作。謝謝:)如果你可以在下面發帖,我會將其標記爲答案,如果不是,我不介意自己做。在stackoverflow上的其他問題的鏈接使我感到困惑,因爲他們的示例通過function_types命名空間顯式訪問is_function,因爲它隨後訪問_cdecl,就好像它已經存在於它們的命名空間中一樣。 – Jeremy