2014-02-26 54 views
2

我已經試過這一聲明通過。功能有其地址作爲參數

a.cpp: In function 'int main()': 
a.cpp:13:26: error: expected ';' before '(' token                               
    using fp_type = void(*)(fp_type);                                   
         ^                                    
a.cpp:13:34: error: expected primary-expression before ')' token                            
    using fp_type = void(*)(fp_type); 

是否有解決方法?我正在考慮虛擬函數指針類型reinterpret_cast,但我不確定它是如何符合標準的。我正在研究這個問題,因爲我不想捕獲::std::function中的lambda,然後遞歸使用它。我想給它傳遞一個函數指針。

+3

您是遞歸定義'fp_type',這是行不通的。 – neverhoodboy

+0

我知道。但是對於虛函數指針類型的'reinterpret_cast'仍然是可能的。 – user1095108

+0

咦?這是否是最後一條評論引用了已被刪除的內容?因爲它與這條連鎖店的第一條評論相比毫無意義。 – WhozCraig

回答

1

5.2.10/6保證你可以reinterpret_cast指向一個不同類型的函數指針的函數指針,當你將它轉換回原始類型時,你將返回原始指針值。

我寧願這樣:

void foo (struct foo_wrapper&); 

struct foo_wrapper { 
    void (*pf) (struct foo_wrapper&); 
    // add constructor and accessor for convenience 
};