型マップを持つ、クラス Central のプライベート静的メンバー変数があります。このマップに、「 Base 」から派生したクラスのインスタンスを指す「 Base* 」ポインターを設定したいと考えています。派生クラスのこれらのインスタンスは、動的メモリに格納する必要があります。テンプレートの楽しみも少しあります。マップにデータを入力する方法を試しましたが、コンパイル エラーが発生しました (これについては後で説明します)。
わかりやすくするためのコード スニペットを次に示します。
#include <all_necesary_std_headers>
class Base
{
/* guts */
};
template<class CType>
class Derived: public Base
{
/* innards */
};
class Central
{
/* partial entrails */
private:
// the static map I was referring to
static std::map<string, Base*> base_map;
};
// Initializing the static map here
std::map<string, Base*> Central::base_map;
class Test1
{
/* viscera */
};
// Compilation error here, on next line of code.
Central::base_map["Test1"] = dynamic_cast<Base*>( new Derived<Test1>);
class Test2
{
/* bowels */
};
// Compilation error here, on next line of code.
Central::base_map["Test2"] = dynamic_cast<Base*>( new Derived<Test2>);
これは私が得るコンパイル エラーです :
マップによって割り当てられたメモリを解放するデストラクタが既にあるので、思い出させる必要はありません。main() でクラス " Central " を使用したい。このクラス構造は、ファイルに保存されているクラス名からクラスの新しいインスタンスを動的に作成するために使用されます。
明確であることを願っています。不明な点があれば教えてください。