回答
C++提供了幾種方法來做到這一點。
例如,你可以使用std::function
模板:包括<functional>
並使用下面的語法(demo):
std::function<void()> varFunction(TestFunction);
varFunction();
你也可以使用函數指針(Q&A on the topic)。
使用C++ 11及更高版本,可以使用std::function
來存儲函數指針和函數對象。
但是存儲function pointers從一開始就在C++中可用。這意味着您可以存儲函數的地址並稍後調用它。
BTW,lambda expressions也非常有用(和它們的表示可以closure分配或std::function
-s通過)
這裏是在三種不同的方式來實現你剛纔問的一個例子:
#include <iostream>
#include <functional>
void RunCode(const std::function<void()>& callable) {
callable();
}
void TestFunction() {
std::cout << "TestFunction is called..." << std::endl;
}
int main() {
std::function<void()> varFunction_1 = TestFunction;
void (*varFunction_2)() = TestFunction;
RunCode(varFunction_1);
RunCode(varFunction_2);
RunCode([]() { std::cout << "TestLambda is called..." << std::endl; });
return 0;
}
但是,這是冰山的一角,傳遞函數指針和函數對象作爲參數在algorithms library很常見的。
繼承自C,我認爲。你可以在C中做類似的事情。 –
C還沒有任何lambda表達式或閉包的概念(但在未來的C20標準中可能會改變)。這要求編譯器計算一組關閉值(以lambda表示)。 –
@TomZych,是的。函數指針也用於C中。 – Akira
爲了完整起見,你可以聲明如下C風格的功能類型:
typedef int (*inttoint)(int);
這將創建一個類型inttoint
可存儲需要一個int參數,並返回一個int的任何功能。你可以按如下方式使用它。
// Define a function
int square(int x) { return x*x; }
// Save the function in sq variable
inttoint sq { square };
// Execute the function
sq(4);
由於C++ 11,這些變量也可以存儲lambda函數,像這樣
inttoint half { [](int x) { return x/2; } };
並且如上所述一樣使用它。
最簡單的方法是使用lambda表達式是這樣的:
auto add = [](int a, int b) { return a+b; };
cout << add(10, 20) << endl; // Output: 30
更多信息有關如何lambda表達式工作:http://en.cppreference.com/w/cpp/language/lambda
- 1. 從設置變量調用函數?
- 2. 如何將chrome.alarms.getAll回調函數設置爲變量?
- 3. 如何設置回調並傳遞node.js模塊函數變量
- 4. Swift從函數完成中獲取值並將其設置爲全局變量
- 5. 爲什麼不能將變量設置爲等於Python中的函數調用?
- 6. 如何調用類函數從變量
- 7. 如何將函數的結果設置爲全局變量
- 8. 從回調函數獲取結果並設置爲全局變量
- 9. SQL Count()函數。並設置變量
- 10. 如何使用變量調用函數並將其作爲參數傳遞? jquery
- 11. 如何通過函數調用設置全局變量?
- 12. 如何在PHP中的函數中設置變量變量?
- 13. 從變量調用函數
- 14. 從函數外調用變量變量
- 15. 從回調函數獲取值並設置爲父函數
- 16. CMake的:從嵌套函數設置變量調用
- 17. 使用Javascript將函數數據設置爲變量
- 18. 如何在php中設置函數變量的變量?
- 19. 設置一個變量作爲一個函數調用
- 20. 變量設置爲函數調用返回無
- 21. 將cmdlet設置爲變量而不立即調用該變量
- 22. 如何使用JavaScript變量設置函數設置CSS寬度?
- 23. 如何在函數中調用變量?
- 24. 如何將變量從另一個函數調用到另一個函數中
- 25. 如何從靜態函數中獲取/設置成員變量?
- 26. 如何將curl_init設置爲變量?
- 27. 如何將變量設置爲Cookie(javascript)
- 28. 如何將_path_設置爲變量?
- 29. 如何將回調函數設置爲EventEmitter中的第一個回調函數?
- 30. javascript onclick設置爲變量函數名?
請說明您的具體問題或添加額外的細節,突顯你需要什麼。正如它目前所寫,很難確切地說出你在問什麼。請參閱[如何提問](https://stackoverflow.com/help/how-to-ask)頁面以獲得澄清此問題的幫助。 – cpplearner
你正在尋找的是[函數指針](http://www.cprogramming.com/tutorial/function-pointers.html)。 如果你的函數也可能是lambda函數,函子或其他有狀態的結構,['std :: function'](http://de.cppreference.com/w/cpp/utility/functional/function)是要走的路。 –
考慮閱讀[良好的C++書](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –