2012-10-21 84 views
2

谷歌搜索C++函子語法帶來了很多不同的結果,我不認爲我看到其中的任何需求。有些使用模板,有些使用單個類,有些則使用多個模板,還有一些使用結構。我不確定我想要做什麼的具體元素。所以現在,我想要做什麼:函子之間選擇兩個函數

我有兩個功能。他們都採取完全相同的參數,但不同的命名,將返回不同的結果,但返回類型也是相同的,例如,

unsigned foo1(char *start, char *end);
unsigned foo2(char *start, char *end);

我只是想選擇哪個函數根據布爾變量的值調用。我可以只寫一個謂詞來在兩者之間進行選擇,但這似乎並不是一個優雅的解決方案。如果這是C,我會使用一個簡單的函數指針,但我被告知它們在C++中不能很好地工作。

編輯:由於限制超出我的控制,在這種情況下,我不能使用C++ 11。

回答

4

只需使用std::function

std::function<unsigned int(char*, char*)> func = condition ? foo1 : foo2; 
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^ function signature 

// ... 

unsigned int result = func(start, end); 

此外,函數指針用C正常工作++:

auto func = condition ? foo1 : foo2; 

unsigned int result = func(start, end); 

std::function更加靈活。

+0

啊,std :: function看起來不錯。 「自動」是C++ 11,對嗎? – Eric

+0

@Eric是的,這是正確的。 –

+0

我很感謝你的回答。我應該提到,首先我不能使用C++ 11來解決這個問題。對於那些沒有我的約束的人,​​你的回答將會非常有用,所以我感謝你。 – Eric