私は基本的な機能を提供し、他の派生システムのインターフェイスとして機能するはずのC++でフレームワークを設計しています。C++デザインクエリ
#include <stdio.h>
class Module
{
public:
virtual void print()
{
printf("Inside print of Module\n");
}
};
class ModuleAlpha : public Module
{
public:
void print()
{
printf("Inside print of ModuleAlpha\n");
}
void module_alpha_function() /* local function of this class */
{
printf("Inside module_alpha_function\n");
}
};
class System
{
public:
virtual void create_module(){}
protected:
class Module * module_obj;
};
class SystemAlpha: public System
{
public:
void create_module()
{
module_obj = new ModuleAlpha();
module_obj->print(); // virtual function, so its fine.
/* to call module_alpha_function, dynamic_cast is required,
* Is this a good practice or there is some better way to design such a system */
ModuleAlpha * module_alpha_obj = dynamic_cast<ModuleAlpha*>(module_obj);
module_alpha_obj->module_alpha_function();
}
};
main()
{
System * system_obj = new SystemAlpha();
system_obj->create_module();
}
コードをより論理的に編集し、すぐにコンパイルします。問題は、そのようなシステムを設計するための良い方法があるか、dynamic_castが唯一の解決策であるということです。また、より多くの派生モジュールがある場合は、型キャストのために、基本Moduleクラスにいくつかのインテリジェンスが必要です。
この種の事例では、どのようなユースケースのシナリオがありますか?おそらく(正しく)実現したように、基底クラスに派生クラスの知識が必要な場合、基本的な設計上の問題があるかもしれません。 –
ユースケースは次のようなものです。ベースはシステムを表し、ベース2はシステムのモジュールを表します。私は、システムとモジュールがどのように作成されるか、それらのモジュールがシステム内でどのように相互にやりとりするか、システム間で相互作用する方法を一般化したい。したがって、モジュールが相互作用する一般的な方法を作るためには、それらはBaseクラスの一部でなければなりません。 – user1127533