2009-08-13 89 views
-1

我很好奇兩個,一個單線程和多線程的實現。如何在C++中實現非虛擬接口模式?

感謝

+0

我很想知道你在說什麼 - 你需要提供更多的細節,優先考慮示例代碼。 – 2009-08-13 17:58:47

+1

要添加到Neil中,我不確定單線程和多線程實現的含義。 NVI與線程無關,因此單線程/多線程NVI之間的區別與任何類的單線程/多線程實現之間的區別並沒有什麼不同。 – 2009-08-13 18:11:32

+0

@Nick這個人似乎沉迷於一個小小的C++垃圾郵件巨星。我懷疑他理解他自己的問題。 – 2009-08-13 18:15:58

回答

2

如果你有C++有效(第3版)圍坐副本,斯科特邁爾斯給出了一個很好的處理條款35(第170頁)的NVI成語。

+0

是的,我擁有它。我會看看。 thx – vehomzzz 2009-08-13 18:20:17

2
class base 
{ 
public: 
    void bar() 
    { 
     getReady(); 
     barImpl(); 
     cleanup(); 
    } 
    void getReady() {cout << "Getting ready. ";} 
    void cleanup() {cout << "Cleaning up.\n";} 
protected: 
    virtual void barImpl() {cout << "base::barImpl. ";} 
} 

class derived : public base 
{ 
protected: 
    virtual void barImpl() {cout << "derived::barImpl. ";} 
} 

int main() 
{ 
    base b; 
    derived d; 
    b.bar(); 
    d.bar(); 
} 

輸出:

Getting ready. base::barImpl. Cleaning up. 
Getting ready. derived::barImpl. Cleaning up. 
+0

這對代碼示例來說總是很好,但是有些解釋會做(儘管我看到它的作用)。 – 2009-08-13 18:18:04

+0

在你的情況下虛擬被保護。那私人呢? – vehomzzz 2009-08-13 18:20:54

+0

private很好,但很多書不推薦用於虛函數,因爲語義有點混亂。 – rlbond 2009-08-13 18:42:16