模板类中静态函数或指针的范围分辨率

时间:2013-12-11 05:52:30

标签: c++ templates scope-resolution

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

template <typename T>
class A {
    void func() {
        T::DoSomething();
    }
};

class B {
    static void DoSomething() {
        // code...
    }
};

我个人认为它使模板类难以理解,但我的主要查询领域是性能。哪个更有效率;使用范围解析,或拥有私有成员变量A::T* p_blah并使用B调用p_blah->DoSomething()的函数?

1 个答案:

答案 0 :(得分:2)

范围解析完全在编译时发生。该代码中使用的方法产生直接的,可嵌入的函数调用。你无法真正击败它。

您的提案:

  • 需要以某种方式创建B的实例
  • 要求指向该实例的指针存储在A(增加其大小)或全局(总是有问题的)中
  • 介绍跟踪该实例的生命周期的需要

简而言之,它几乎没有机会像你现在那样有效率。