あなたは次のように独自のデコレータを作成することができます。
#include<functional>
#include <iostream>
void count_time() {};
void count_X_metrics() {};
void decorator(std::function<void()> work)
{
count_time();
count_X_metrics();
work();
count_time();
count_X_metrics();
}
void do_work_1() {
std::cout << "Hello, World 1!" << std::endl;
}
void do_work_2() {
std::cout << "Hello, World 2!" << std::endl;
}
int main() {
decorator(do_work_1);
decorator(do_work_2);
}
編集:私はあなたのcount_time
とcount_X_metrics
機能がどのように動作するかわからないんだけど、あなたはもっと複雑なものが必要な場合、またはトラックを維持する方法をあなたのためにその仕事をするオブジェクトを作成することができます。これはあなたが必要とするよりも、確かに異なっているが、うまくいけば、それは私が作るしようとしている点が伝え:
#include<functional>
#include <iostream>
int current_time() { return 0; }
int x_metric() { return 0; }
class Timer {
public:
void time(std::function<void()> work) {
// Capture state before
int starttime = current_time();
int startmetric = x_metric();
work();
// Capture state after
int endtime = current_time();
int endmetric = x_metric();
// Update results
ellapsed = endtime - starttime;
metric = endmetric - startmetric;
// Possibly do something with the metrics here.
// ...
}
int get_ellapsed() { return ellapsed; }
int get_metric() { return metric; }
private:
int ellapsed;
int metric;
};
void do_work_1() {
std::cout << "Hello, World 1!" << std::endl;
}
void do_work_2() {
std::cout << "Hello, World 2!" << std::endl;
}
int main() {
Timer t;
t.time(do_work_1);
// Possibly do something with the metrics here.
// cout << t.get_ellapsed();
t.time(do_work_2);
}
この種を取得するためにソフトウェアを実行して分析する「パフォーマンス・プロファイラ」または単に「プロファイラ」として知られているソフトウェアの部分があります情報のコンパイラがこのようなものを提供しているかどうかを確認してください。 –
@BobJarvisイベントドリブンシミュレーションの場合、私はプロファイラを使用できません。 –