fork download
  1. #include <iostream>
  2. #include <functional>
  3. #include <vector>
  4.  
  5. void someFunction () {
  6. std::cout << "someFunction\n";
  7. }
  8.  
  9. class FunctionalClass {
  10. public:
  11. FunctionalClass (int x) : m_x (x) {}
  12. void operator () () {
  13. std::cout << "FunctionalClass {" << m_x << "}.operator ()\n";
  14. }
  15. private:
  16. int m_x;
  17. };
  18.  
  19. class SomeClass {
  20. public:
  21. SomeClass (int x) : m_x (x) {}
  22. void someMemberFunction () {
  23. std::cout << "SomeClass {" << m_x << "}.someMemberFunction\n";
  24. }
  25. private:
  26. int m_x;
  27. };
  28.  
  29. int main() {
  30. FunctionalClass f (42);
  31. SomeClass c (123);
  32. int closured = 456;
  33.  
  34. std::vector<std::function<void()>> funArray { // Array mit std::function
  35.  
  36. &someFunction, // Funktionspointer reinpacken
  37.  
  38. f, // Funktional (Klasse mit operator ()) reinpacken (kopieren!)
  39.  
  40. std::bind(&SomeClass::someMemberFunction, c), // Member-Funktion mit zugehöriger Instanz reinpacken
  41.  
  42. [&]() { // Lambda reinpacken
  43. std::cout << "lambda closured=" << closured << '\n';
  44. }
  45. };
  46.  
  47. for (auto& f : funArray) { // Alle reingepackten Funktionen aufrufen
  48. f ();
  49. }
  50.  
  51. return 0;
  52. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
someFunction
FunctionalClass {42}.operator ()
SomeClass {123}.someMemberFunction
lambda closured=456