2013-12-11 10 views
0

我目前正在編寫其他人編寫的代碼,但我不確定其方法的效率。他們有一個模板類,它使用作用域解析來訪問類的成員,而不是指向模板化類並訪問它。例如:作用域分辨率到模板類中的靜態函數或指針

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

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

我個人覺得它使模板類很難理解,但我查詢的主要領域是性能。哪個更有效率;使用示波器分辨率,或者使用私有成員變量A::T* p_blah並使用p_blah->DoSomething()調用B的函數?

回答

2

範圍解析是完全在編譯時發生的事情。該代碼中使用的方法會導致直接的,不可變的函數調用。你無法真正打敗。

你的建議:

  • 需要B的情況下以某種方式創建
  • 需要一個指針,例如無論是存儲在A(增加其大小),或在全球(總是有問題的)
  • 介紹了需要跟蹤實例的生存

總之它被作爲你目前有高效的機會不大。

+0

我也這麼想。那麼使用靜態函數方法是否沒有缺陷? (假設類沒有成員變量) – Edward

+0

如果通過「使用靜態函數方法」,你的意思是調用'B :: foo()'然後no。你的觀點認爲它讓班級「更難理解」並不合理。當它打算成爲一個靜態調用時,放置一個'ptr-> foo()'會「模糊」模板。 – Mat