struct myStruct{ //Ctor myStruct() { } void function_2() { //come faccio da qui a richiamare la function_1?? (attenzione, si tratta di una struct e nn di una classe (anche se dovrebbero essere la stessa cosa...) //this.function_1? //boost::bind?? //std::bind?? }private: void function_1(int a) { //... }}
// myStruct.h#pragma oncestruct myStruct{public: // il default è già public, ma specificarlo non guasta myStruct(); void function_2();private: void function_1();};// Da qui in poi l'implementazione... se non ti piace qui, puoi fare cut-paste su un file .cpp separato//CtormyStruct::myStruct(){}void myStruct::function_2(){ //come faccio da qui a richiamare la function_1?? (attenzione, si tratta di una struct e nn di una classe (anche se dovrebbero essere la stessa cosa...) //this.function_1? //boost::bind?? //std::bind?? function_1(42);}void myStruct::function_1(int a){ //...}// END - myStruct.h
Uhmmmma a fare stessa cosa cn std::bind o boost::bind? Il problema in realtà è proprio questo per me!
PS, leggasi curiosità mia: perchè usare una Struct quando in C++ praticamente non hanno senso?
Citazione da: "TheKaneB"PS, leggasi curiosità mia: perchè usare una Struct quando in C++ praticamente non hanno senso? Beh, dovresti chiederlo a Stroustrup.
Citazione da: "clros"Uhmmmma a fare stessa cosa cn std::bind o boost::bind? Il problema in realtà è proprio questo per me!Non conosco Boost, fai un esempio concreto di codice e vediamo che si può fare... :-)
#include <iostream>#include <functional>using namespace std;struct myStruct{ void function_1() { std::bind(function_2,45); } private: void function_2(int n) { cout<<"richiamata funzione 2"<<endl; }};
Codice: [Seleziona]#include <iostream>#include <functional>using namespace std;struct myStruct{ void function_1() { std::bind(function_2,45); } private: void function_2(int n) { cout<<"richiamata funzione 2"<<endl; }};Questo non compila su GCC4.6.1...problemi cn bind....
bind(&myStruct::function_2, this, 45);
bind(&myStruct::function_2, this, 45)();
Ah, una cosa... non implementare i metodi direttamente in quel modo, è orrendo. Metti l'implementazione in un file cpp separato e usa la notazione void myStruct::function_1() { } esattamente come se fosse una classe.Se proprio devi implementare il corpo dei metodi nell'header, allora fallo alla fine, in questo modo: [...]
Python? 8-)