2009-08-13 30 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