鑑於一些基本接口A,B,C ....Ñ如何實現多個接口的多態參數?
並實現一組其中的一些假設的類:
class MyClass1: public A, public B, public N;
class MyClass2: public A, public B, public D;
我想創建功能,其接受作爲參數的對象(或指針爲對象)的一類,其中包括,讓說A和B.
void myFunc(A&B obj);
從一個C++程序員的角度來看,這似乎荒謬的。從軟件架構師的角度來看,這似乎是所有語言都應該具備的基本集團。
是否有任何技巧(模板除外)或解決方案?
注意:大多數接口不是來自我的,所以原則上不可能對接口進行更改。
編輯: 這裏是一些例子:
class A{
public:
virtual void draw()=0;
};
class B{
public:
virtual void edit()=0;
};
class AandB: public A, public B
{
virtual void draw()override{};
virtual void edit()override{};
};
//This function know about A, B, but not AandB
void some_function((A+B)& a_and_b) { // That do not work
a_and_b.draw();
a_and_b.edit();
}
int main()
{
AandB c;
some_function(c); // that is not so easy
}
在我看來,'MyClass'繼承'A'和'B'這個事實與這個問題無關。 'A'和'B'是不相關的類型,所以真正的問題是如何編寫一個可以接受兩種不相關類型之一的函數。 – Galik
@Galik:這是一個界面的要點:定義一些行爲。 A是一種行爲(可繪製?),B是另一種行爲(可編輯?)。所以這個函數接受任何可編輯和可繪製的類。所以你的問題的答案是:不是A或B,而是A和B. –
啊好的。所以你想接受任何實現'A'和'B'的類。模板實際上是解決這個問題的方法,您爲什麼不想要模板解決方案? – Galik