次のクラス階層は、抽象リソース ハンドラーとリソース階層を表しています。どちらも基本クラスとしてインターフェイスを持っています。ここで、これらのインターフェースの下に複数の特定のリソース システムを実装できるシステムを作成することを想像してください。これはほんの一例です。特定のメイン クラスは、stuff から派生したリソースを作成します。作成されたリソースが基本インターフェイスに渡されると、基本リソース クラスへのポインターとして渡されますが、特定のリソースを処理し、その特定の属性にアクセスしたいと考えています。
二重発送については知っていますが、この場合はうまくいかないと思います。RTTI と dynamic_casts を防止したいと考えています。そのような場合を処理するための提案はありますか?
class resource;
class main_resource_handler
{
public:
virtual resource* create_resource() = 0;
virtual void do_some(resource* st) = 0;
};
class resource
{
};
class specific_resource : public resource
{
public:
int i;
};
class specific_resource_handler : public main_resource_handler
{
public:
stuff* create_resource) {
return new specific_resource);
}
void do_some(resource* st) {
// in here i want to work with specific resource
}
void do_some(specific_resource* st) {
// i want to get here
}
}
main_resource_handler* handler = new specific_resource_handler();
resource* res = handler->create_resource();
handler->do_some(res); /// here