我有一个项目,希望动态构建特定函数调用的图。例如,如果我有2个模板类A和B,其中A具有被跟踪的方法(保存为图节点),而B有3个方法(未被跟踪的方法、被跟踪的方法和调用A的被跟踪方法的被跟踪方法),那么我只想将被跟踪的方法调用注册为图对象中的节点。图对象可以是单例。
这应该输出一个类似于下面所示的图形对象:
template <class TA>
class A
{
public:
void runTracked()
{
// do stuff
}
};
template <class TB>
class B
{
public:
void runNonTracked()
{
// do stuff
}
void runTracked()
{
// do stuff
}
void callATracked()
{
auto a = A<TB>();
a.runTracked();
// do stuff
}
};
void root()
{
auto b1 = B<int>();
auto b2 = B<double>();
b1.runTracked();
b2.runNonTracked();
b2.callATracked();
}
int main()
{
auto b = B<int>();
b.runTracked()
root();
return 0;
}
这应该输出一个类似于下面所示的图形对象:
root()
\-- B<int>::runTracked()
\-- B<double>::callATracked()
\-- A<double>::runTracked()
需要可调整跟踪的功能。如果根可调整(如上例),那将是最好的。 有没有简单的方法来实现这一点?
我正在考虑引入跟踪功能的宏和一个Singleton图形对象,该对象将注册被跟踪的功能作为节点。但是,我不确定如何确定调用堆栈中的最后一个跟踪函数,或者(从图的角度)在添加新节点时应该将哪个图节点作为父节点。
root()
)引起的所有(被跟踪的)调用。 - Wolf