假设我有一个名为 Person 的类,它拥有三种宠物:
class Person
{
public:
accept(Pet a);
private:
Dog d; // is a Pet
Cat c; // is a Pet
Fish f; // is a Pet
}
Person::accept(Pet a)
{
// if pet is Dog, then
d = a;
// if pet is Cat, then
c = a;
// if pet is Fish, then
f = a;
};
我想typeid
这里可以使用。但是,它对我来说仍然很奇怪。
是否可以应用某种多态性、虚函数或一些 OOP 模式?
- 编辑 -
对不起这里的坏例子。让我试试另一个:
// Usually a context contains three different resources:
class Context
{
public:
setResource(Resource *r);
private:
Buffer *b_; // is a Resource
Kernel *k_; // is a Resource
Sampler *s_; // is a Resource
};
Context::setResource(Resource *r) { // same logic as Person::accept() above }
Context::handlingBuffer() { if (b_) b_->init(); ... }
Context::run() {
if (b_ && k_) {
k_.setBuffer(b_);
k_.run();
}
}
...
在这种情况下,看起来添加一个Resource *r_[3]
inContext
会使事情变得更加复杂。
那么,是否可以将 Resource 基类的指针传递给setResource()
,它可以自动决定设置哪个资源?