I'm struggling with the following problem and if this has been asked, I apologize.
I have multiple parts in my code doing a similar job - they mainly differ in a function call:
int doSomething(string* s, int i) {
  ...
}
int doSomethingOther(string* s, string t) {
  ...
}
int main() {
  int num;
  string s;
  // do something with num
 
  // repeating part start
  string str1;
  // do some stuff
  
  int res1 = doSomething(&str1, num);
  cout << "res: " << res1 << " str1: " << str1 << endl;
  // end
  // do something with s
  
  // here we go again but with a different function call
  string str2;
  // do some stuff
  int res2 = doSomethingOther(&str2, s);
  cout << "res: " << res2 << " str2: " << str2 << endl;
  //end
  
  return 0;
}
Is it possible to define a general function to reduce the writing effort? One possibilityis using a parameter for this common function indicating which function should be used. On the other hand if the called function was always the same, it would be also possible by using a function pointer:
...
void generalFct(int p, int(*doSomethingFct)(string* aString, int anInt)) {
  string s;
  // do some stuff
  int res = (*doSomethingFct)(&s, p);
  cout << "res: " << res << " s: " << s << endl;
  // do some other stuff
}
...
int main() {
  int num;
  // do something with num
  generalFct(num, &doSomething);
  ...
  
  // update num...
  generalFct(num, &doSomething);
}
But unfortunately the signature of doSomething and doSomethingOther differs (otherwise that would be a solution) and that's where I stuck. Is there any kind of technique that helps me to achieve my goal, i.e. something like that:
int main() {
  int num;
  // do something with num
  generalFct(num, &doSomething);
  ...
  
  // update num...
  generalFct(num, &doSomethingOther);
}
Aucun commentaire:
Enregistrer un commentaire