基类方法的接口

Interface to base class method

本文关键字:接口 类方法 基类      更新时间:2023-10-16

对于下面的代码,有没有其他方法可以通过接口访问base中的方法?

struct Base {
    void funct_base() {
        printf("Common function for class Foo and class Barn");
    }
};
struct IFoo {
    virtual ~IFoo() {}
    virtual void funct_a() = 0;
    // would like to access Base::bunct_base() from here
};
struct Foo : public Base, public IFoo {
    virtual void funct_a() {
        printf("I am Foo:: funct An");
    }
};
class IBar {
    virtual ~IBar() {}
    virtual void funct_a() = 0;
    // would like to access Base::bunct_base() from here
};
class Bar : public Base, public IBar {
    virtual void funct_a() {
        printf("I am Bar:: funct An");
    }
};

我知道这是可以做到的,但我只是不喜欢包装,它看起来不干净:

struct IBar {
    virtual ~IBar() {}
    virtual void funct_a() = 0;
    virtual void funct_base() = 0;
};
struct Bar : public Base {
    virtual void funct_a() {
        printf("I am Bar:: funct An");
    }
    virtual void funct_base() {
        Base::funct_base(); 
    }
};

编辑:

问题是,有一个基类和两个从同一基类继承的不同派生类。有没有一种方法可以在不添加基类方法包装器的情况下通过派生类接口访问基类方法?

使用抽象基类IBase和抽象方法funct_base,并使接口类成为类BaseIFooIBar的虚拟基类:

struct IBase {
    virtual void funct_base() = 0;
};
struct Base : public virtual IBase {
    virtual void funct_base() override {    printf("Common function for class Foo and class Barn"); }
};
struct IFoo : public virtual IBase {
    virtual void funct_a() = 0;
};
struct Foo : public IFoo, public Base {
    virtual void funct_a() override { printf("I am Foo:: funct An"); }
};
class IBar : public virtual IBase {
    virtual void funct_a() = 0;
};
class Bar : public IBar, public Base {
    virtual void funct_a() override { printf("I am Bar:: funct An"); }
};