3種類のペットを飼っている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]
になるようです。Context
では、Resourceの基本クラスのポインタをに渡すことは可能で、setResource()
どのリソースを設定するかを自動的に決定できますか?