2014-03-07 63 views
0

在C++中有以下可能嗎?高級函數指針?

int do_stuff(int one, int two) 
{ 
    ... 
    return ...; 
} 

int main() 
{ 
    void *ptr = &do_stuff(6, 7);//DON'T CALL THE FUNCTION, just store a pointer 

    cout << *ptr;//call the function from the pointer without having to pass the arguments again 
} 

我知道這可以用類來完成,但它可能是我嘗試去做的方式嗎?

+0

你試過了嗎? –

+0

仿函數可以是一個選擇 – billz

回答

1

不,不是那樣。代碼中沒有任何東西

void *ptr = &do_stuff(6, 7); 

這使得它解析就像你想要的。我不確定它是否可以解析,全部爲,如果您可以獲取返回值的地址。取一個函數的地址基本上是空操作,但函數指針不會轉換爲void *,所以它有問題。

你需要更多的魔法,比如C++ 11的lambda closures

我沒有C++程序員11,但我猜你的代碼看起來像:

int main(void) 
{ 
    auto func = []() { do_stuff(6, 7); }; 
    func(); 
    return 0; 
} 
+0

啊哈,我明白了lambda的用法。謝謝! – Luka

2
與C++ 11

好和的std ::功能和std ::綁定一個小魔術您可以。

std::function<int()> f = std::bind(&do_stuff,6,7); 
std::cout << f(); 
+1

除非需要類型擦除,否則最好避免'std :: function'的開銷。如果僅在本地使用,我會聲明'auto f'來爲它提供'bind'返回的可調用類型。 –