2011-12-03 38 views
0

使用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相關問題,我對它相當陌生,而且我首先潛入其中一個更困難的圖書館。

謝謝。

+0

'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'(它遍歷序列的元素)或其朋友之一。 –

+1

我懷疑你需要使用適當的命名空間(boost :: function_types)來限定cdecl_cc。你可能還需要''#include ' –

+0

@AlanStokes我不知道我必須使用boost :: function_types命名空間,因爲我的印象是它只是一個簡單的定義 - 網站上的例子似乎也假設你已經在命名空間中。無論如何,你的解決方案工作。謝謝:)如果你可以在下面發帖,我會將其標記爲答案,如果不是,我不介意自己做。在stackoverflow上的其他問題的鏈接使我感到困惑,因爲他們的示例通過function_types命名空間顯式訪問is_function,因爲它隨後訪問_cdecl,就好像它已經存在於它們的命名空間中一樣。 – Jeremy

回答

1

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

Boost很棒,但文檔有時可能會模糊。我認爲他們傾向於把它寫成標準的一部分,所以命名空間是隱含的。但除非另有說明,否則您應該假設所有內容都位於某個名稱空間中,或者是boost或更具體的名稱空間。