模板类中静态函数或指针的作用域解析



我目前正在编写其他人编写的一些代码,我不确定他们方法的效率。它们有一个模板类,它使用范围解析来访问类的成员,而不是使用指向模板化类的指针并以这种方式访问它。例如:

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(增加其大小)或全局(总是有问题)中
  • 引入了跟踪实例生存期的需要

简言之,它几乎没有机会像你目前所拥有的那样高效。

最新更新