类接口功能

  • 本文关键字:功能 接口 c++
  • 更新时间 :
  • 英文 :


如果我有以下代码:

class A_Interface {
 public:
    virtual void i_am_a() = 0;
};
class A : public A_Interface {
 public:
    void i_am_a() {printf("This is An");}
};
class B_interface {
 public:
    virtual void i_am_b() = 0;
    // would like to run i_am_a()
};
class B : public A, public B_interface {
 public:
    void i_am_b() {printf("This is Bn");}
};
int main() {
    B BO;
    B_interface* BI = &BO;
    BI->i_am_b();
    // ******* WOULD LIKE TO RUN THE FOLLOWING ********
    BI->i_am_a();
}

我的选项是什么,能够从B_Interface指针运行类A成员函数?

我知道B_interface继承A_interface是可能的:

类B_Interface: virtual public A_interface…

class A : virtural public A_Interface ...

但是,就我所知,这使得使用GMOCK来模拟类b是不可能的。我有什么选择?

谢谢…

Inside class B_interface have:

void i_am_a()
{
     // throws if the object does not actually have A as a base
     dynamic_cast<A &>(*this).i_am_a();
}

好吧,我又错了。那么答案代码可以是这样的:

class A_Interface {
 public:
    virtual void i_am_a() = 0;
};
class A : virtual public A_Interface {
 public:
    void i_am_a() {printf("This is An");}
};
class B_Interface : virtual public A_Interface {
 public:
    virtual void i_am_b() = 0;
    // would like to run i_am_a()
};
class B : public A, public B_interface {
 public:
    void i_am_b() {printf("This is Bn");}
};

GMock可以像这样:

class MockB : public B_Interface, public MockA {
    MOCK_METHOD0(foo, int(int));
}

这在实际应用中对我来说是有效的,但是看起来有点乱。

最新更新