2012-08-24 18 views
0

我正在開發一個項目,我必須根據某些條件確定是否必須調用用戶提供的函數。問題在於提供的功能可以具有任何簽名。有沒有可能使用當前的C++ 11標準來完成以下內容? (代碼必須編譯使用Visual C++ 2010):稍後調用的商店模板函數

template <what do I put here?> 
void functioncall(std::function<and here> f) 
{ 
    ReturnType returnval = f(arguments); 
} 
+3

你怎麼稱呼它,如果你不知道'參數',以及你可能用返回的值做什麼? –

回答

2

這甚至有可能在C++ 03,只是使用不受限制的參數:

template<class F> 
void call(F f) // accept any callable entity 
{ 
    ReturnType retval = f(arguments); 
} 
+0

我不認爲你的解決方案適用於此,因爲可調用實體可以有任何簽名。例如,我必須能夠 調用: int f1(int y,int z){return y + z;} char * f2(int x){return nullptr;} call(f1);呼叫(F2); 這些都必須工作。我從你的評論中遺漏了什麼? – razvanp

+2

@razvanp:Erm ...一個* unrestricted * callable實體如何不允許這樣做?無論你想要什麼,都可以打電話給你 – Xeo

+0

你能舉個例子嗎?這是我第一次偶然發現這個詞。非常感謝你。 – razvanp