C ++: Fonction wrapper qui se comporte comme la fonction elle-même

Comment puis-je écrire un wrapper qui peuvent envelopper toute fonction et peut être appelé comme la fonction elle-même?

La raison que j'ai besoin de ceci: je veux un objet Timer qui peuvent encapsuler une fonction et se comportent exactement comme la fonction elle-même, plus il enregistre le temps cumulé de l'ensemble de ses appels.

Le scénario devrait ressembler à ceci:

//a function whose runtime should be logged
double foo(int x) {
  //do something that takes some time ...
}

Timer timed_foo(&foo); //timed_foo is a wrapping fct obj
double a = timed_foo(3);
double b = timed_foo(2);
double c = timed_foo(5);
std::cout << "Elapsed: " << timed_foo.GetElapsedTime();

Comment puis-je écrire ce Timer classe?

Je suis en train d'essayer quelque chose comme ceci:

#include <tr1/functional>
using std::tr1::function;

template<class Function>
class Timer {

public:

  Timer(Function& fct)
  : fct_(fct) {}

  ??? operator()(???){
    //call the fct_,   
    //measure runtime and add to elapsed_time_
  }

  long GetElapsedTime() { return elapsed_time_; }

private:
  Function& fct_;
  long elapsed_time_;
};

int main(int argc, char** argv){
    typedef function<double(int)> MyFct;
    MyFct fct = &foo;
    Timer<MyFct> timed_foo(fct);
    double a = timed_foo(3);
    double b = timed_foo(2);
    double c = timed_foo(5);
    std::cout << "Elapsed: " << timed_foo.GetElapsedTime();
}

(BTW, je sais de gprof et d'autres outils pour le profilage de l'exécution, mais avoir un tel Timer objet pour le journal de l'exécution d'une sélection de fonctions est plus pratique pour mes fins.)

source d'informationauteur Frank