我有一个 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>);
这是我得到的编译错误: error: expected constructor, destructor, or type conversion before '=' token;
我已经有一个析构函数来释放映射分配的内存,所以不需要提醒我。我想在 main() 中使用“Central”类。这个类结构将用于从存储在文件中的类名动态创建类的新实例。
希望很清楚,如果有什么不明白的,请说。