0

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

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

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

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

4

1 回答 1

2

范围解析是完全在编译时发生的。该代码中使用的方法会导致直接的、可内联的函数调用。你真的不能打败它。

你的提议:

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

简而言之,它几乎不可能像您目前拥有的那样高效。

于 2013-12-11T06:03:07.217 回答