Hjälp i C++ med parametrar i funktioner

Permalänk

Hjälp i C++ med parametrar i funktioner

Hejsan jag har suttit och grubblat i några dagar på hur jag ska lösa det men har inte haft någon lycka med att lösa detta och vänder mig därför hit till de visare.

Min fråga är om det går att skicka med en funktion i parametrarna till en annan funktion och sedan få den med skickade funktionen att köras i den yttre funktionen. Ett exempel med beskrivning kommer nedan.

Exempel 1

void function_A(){ cout << "I am function A" << endl; } void function_B(){ cout << "I am function B" << endl; } void function_C(void function()){ function(); } int main(){ function_C(function_A()); function_C(function_B()); }

Detta är mitt problem fast ner dummat men lösning bör bli den samma, vad jag försöker åstadkomma är att man kan skicka med tex funktion_A eller funktion_B in funktion_C parametrar ( ) för att den sedan ska köra funktionen.

Det finns ett uppenbart problem med kodning i funktions_C parametrar som gör koden icke körbar, men undrar om det finns möjlighet på nåt tips för att lösa mitt problem.

Tack på förhand!

Permalänk
Visa signatur

Asrock Z68 Extreme 7 gen 3 | EVGA GTX580 SLI | Intel i7 2600k | Corsair Vengeance 16GB
Corsair H80 | Corsair Force 3 120gb | HX1050 |NZXT Phantom | Samsung 22" SA300

Sony VAIO pro 13
i7 8GB 256GB

Permalänk
Datavetare

Länken till stackoverflow visar hur man skickar en pekare till en funktion som argument, i ditt fall skulle det se ut så här

#include <iostream> using namespace std; void function_A(){ cout << "I am function A" << endl; } void function_B(){ cout << "I am function B" << endl; } void function_C(void(*fn)(void)){ fn(); } int main(){ function_C(function_A); function_C(function_B); }

Dold text

Om du lär dig C++ idag så kan man utgå från att det är C++11 som är intressant och enligt t.ex. Microsoft så finns det absolut ingen anledning att använda äldre varianter av C++, C++11 är även det rekommenderade sättet i moderna versioner av g++ och clang. Då skulle det i stället se ut så här

#include <functional> #include <iostream> using namespace std; void function_A() { cout << "I am function A" << endl; } void function_B() { cout << "I am function B" << endl; } void function_C(function<void(void)> fn) { fn(); } int main(){ function_C(function_A); function_C(function_B); }

Dold text

Fördelen med det senare är, förut en syntax som i alla fall jag tycker är enklare att begripa, är att std::function<> kan ta alla former av entiteter som kan anropas. Är definitivt överkurs för någon som precis börjat med C++ men kan ändå ge lite exempel på saker som man kan göra med std::function<> som inte fungerar med funktionspekare.

#include <functional> #include <iostream> using namespace std; struct C { int m; C(int __m) : m(__m) { } // Make the object 'callable' void operator()(void) const { cout << "In class C where member m=" << m << endl; } }; function<void(void)> closure(int x) { return [=](void) { cout << "In closure with encapsulated value x=" << x << endl; }; } void will_be_returned_by_fun() { cout << "In function without associated state" << endl; } function<void(void)> fun() { // This can be done even with function pointers return will_be_returned_by_fun; } int main() { function<void(void)> fn; fn = fun(); fn(); fn = closure(17); fn(); fn = C(42); fn(); }

Dold text

Kör man de sista programmet så får man

In function without associated state In closure with encapsulated value x=17 In class C where member m=42

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer