我坚信这是一个非常常见的面向对象问题,但很难谷歌搜索并没有给我答案。我希望有人能指出我摆脱僵局的正确方法。我尝试了解和使用标准技术,避免重新发明轮子。
简而言之:
class A {
protected:
int _A;
public:
virtual void commonMethod() = 0;
void methodForMember_A();
}
class B : public A {
protected:
int _B;
public:
virtual void commonMethod()
void methodForMember_B();
}
class C : public B {
protected:
int _C;
public:
virtual void commonMethod()
void methodForMember_C();
}
class Basic {
protected:
// B or C instance
shared_ptr<A> _smth;
public:
Basic(shared_ptr<A> a_ptr) : _smth(a_ptr);
// calls A/B/C->commonMethod();
void commonMethod();
}
// Which works with B
class MoreSpecific : public Basic {
public:
MoreSpecific(shared_ptr<B> b_ptr) : Basic(b_ptr);
// calls b->methodForMemberB();
void specificMethod();
}
问题出specificMethod()
在我想打电话的地方_smth->methodForMemberB()
。
我可以看到以下方式:
全部铸造
specificMethods()
?(在我看来,铸造是一种救生艇,必须在非常复杂的情况下使用)模板的时间?(不确定模板是否适合此处)
设计是绝对错误的?
先感谢您。