我目前正在编写其他人编写的一些代码,我不确定他们方法的效率。它们有一个模板类,它使用范围解析来访问类的成员,而不是使用指向模板化类的指针并以这种方式访问它。例如:
template <typename T>
class A {
void func() {
T::DoSomething();
}
};
class B {
static void DoSomething() {
// code...
}
};
我个人觉得这让模板类很难理解,但我的主要查询领域是性能。哪个更有效;使用作用域解析,或者具有私有成员变量A::T* p_blah
并使用p_blah->DoSomething()
调用B
的函数?
作用域解析完全是在编译时进行的。该代码中使用的方法会产生一个直接的、可内联的函数调用。你真的无法战胜它。
您的建议:
- 要求以某种方式创建B的实例
- 要求指向该实例的指针存储在
A
(增加其大小)或全局(总是有问题)中 - 引入了跟踪实例生存期的需要
简言之,它几乎没有机会像你目前所拥有的那样高效。