【问题标题】:C++ question: feature similar to Obj-C protocols?C++ 问题:类似于 Obj-C 协议的特性?
【发布时间】:2011-03-09 00:26:47
【问题描述】:

我习惯在我的代码中使用 Objective-C 协议;他们在很多事情上都令人难以置信。但是,在 C++ 中,我不确定如何完成同样的事情。这是一个例子:

  1. 表格视图,有一个函数 setDelegate(Protocol *delegate)
  2. 类 Class 的委托,但实现协议“协议”
  3. Class2 的委托,也实现了“协议”
  4. setDelegate(objOfClass) 和 setDelegate(objOfClass2) 都有效

在 Obj-C 中这很简单,但我不知道如何在 C++ 中做到这一点。有可能吗?

【问题讨论】:

    标签: c++ objective-c protocols delegation


    【解决方案1】:

    基本上,不是“协议”而是认为“具有纯虚函数的基类”,有时在其他语言中称为接口。

    class Protocol
    {
    public:
        virtual void Foo() = 0;
    };
    
    class Class : public Protocol
    {
    public:
        void Foo() { }
    };
    
    class Class2 : public Protocol
    {
    public:
        void Foo() { }
    };
    
    class TableView
    {
    public:
        void setDelegate(Protocol* proto) { }
    };
    

    【讨论】:

    • 谢谢,但我有一个问题。不同的类,即 Class 和 Class2,本身已经是子类。
    • @jfm429,这就是类可以有多个祖先的原因。
    • 啊,我忘了。我可以看到很多问题,特别是我过去使用过的一些特定的类结构(我之前研究过单/多继承,并且有优缺点,主要是缺点)但在这种情况下它不会不会引起任何问题。
    • 好的,我认为这很好,但后来我遇到了这些错误:drp.ly/1gXq1j 是的,“Classin”就像它出现在错误中一样,即使它应该是“Class in”。这里有什么想法吗? (编辑:将文本放在该链接上,因为这些子集似乎无法使用换行符格式化...)
    • 如果您将虚函数声明为纯虚函数,即使用 = 0;,则它们不需要空函数体。就像我在上面的例子中所做的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    相关资源
    最近更新 更多