Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 接口的延迟实现_C++_Interface - Fatal编程技术网

C++ 接口的延迟实现

C++ 接口的延迟实现,c++,interface,C++,Interface,我有一门课 struct Foo { void someFunc() { } }; 我有一个接口IFoo struct IFoo { virtual void someFunc() = 0; }; 如果我不想直接将IFoo实现到Foo中,有没有办法在以后再实现呢 尝试执行此操作失败: 创建一个同时实现它们的类。。。通过继承Foo,在理论上满足IFoo struct Bar : Foo, IFoo { }; 可以这样使用: Bar x = Bar(); I

我有一门课

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视为抽象的

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

struct Bar : IFoo, Foo
{
    virtual void someFunc()
    {
        Foo::someFunc();
    }
};
或:


只是出于好奇,你为什么要这么做?或者这更像是一个理论问题?我们有一个赢家。我知道这很简单!谢谢你,巴德。现在看来很明显:-/Bar是什么样的结构?包装纸?如果我给它起一个与Foo有关的名字,你会叫它什么?包装食品?我的意思是。。。这属于什么设计模式?@bikie:不知道第一个涉及多重继承的设计模式的名称,但第二个可以是adapter@Beakie这两个解决方案都是设计模式“适配器”(又名“包装器”)的实现
struct Bar : IFoo
{
    Foo foo;    
    virtual void someFunc()
    {
        foo.someFunc();
    }
};