【问题标题】:Late implementation of an interface接口的后期实现
【发布时间】:2014-09-18 11:25:21
【问题描述】:

我有一个班级 Foo。

struct Foo
{
    void someFunc()
    {
    }
};

我有一个接口 IFoo。

struct IFoo
{
    virtual void someFunc() = 0;
};

如果我不想直接将 IFoo 实现到 Foo 中,以后有办法吗?

...

一个失败的尝试是这样做: 创建一个同时实现它们的类...通过从 Foo 继承从理论上满足 IFoo。

struct Bar : Foo, IFoo
{

};

可以这样使用:

Bar x = Bar();
IFoo* y = &x;

但这没有用。编译器将 Bar 视为抽象。

请问有人有什么想法吗?没有要粘贴的实际代码问题,我只是想看看这样的事情是否可行。

【问题讨论】:

  • 只是出于好奇,你为什么要这样做?还是这更像是一个理论问题?

标签: c++ interface


【解决方案1】:
struct Bar : IFoo, Foo
{
    virtual void someFunc()
    {
        Foo::someFunc();
    }
};

或:

struct Bar : IFoo
{
    Foo foo;    
    virtual void someFunc()
    {
        foo.someFunc();
    }
};

【讨论】:

  • 我们有一个赢家。我知道这很简单!谢谢芽。现在看起来很明显:-/
  • Bar 是什么结构?一个包装?如果我要给它起一个与 Foo 相关的名字,你会怎么称呼它? FooWrapper?
  • 我的意思是......这将归类在什么设计模式下?
  • @Beakie:不知道第一个涉及多重继承的名称,但第二个可以是适配器
  • @Beakie 这两个解决方案都是设计模式“适配器”(又名“包装器”)的实现
猜你喜欢
  • 2011-07-20
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 2013-08-03
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多