如何从标识符创建类?
how to create a class from an identifier?
标题可能有点误导,但我想通过多态性给一个类的某个实例一个不同类的实例。我认为这可能更具误导性,所以我举个例子;
假设我有一个名为Spell
的类,它是类Firebolt
的父类。我希望另一个类,比如Character
,能够在它的记忆中拥有咒语"Firebolt",而不必 #include"Firebolt"的文件。
现在,我可以想到以前的游戏以前做过的方法。通过为每个咒语(或任何其他特定类类型)提供一个静态的 const 字符串 ID 或名称,并在拼写中具有一些可以访问此 ID/name 的函数,如果它们相同,则return
new Firebolt()
。
这听起来实际上不错,我遇到的问题是我不知道如何编码。我不确定如何从父类访问这些 ID,也不确定如何制作一个实际返回正确Spell
的虚函数。任何帮助都会很棒。我还将提供我在这里使用的实际类代码,以防它可以帮助你们回答,或者有人有类似的问题来解决它。
父类;
class Art {
std::string name;
int EPCost;
int castTime;
int AoESize;
public:
Art(std::string n, int cp, int ct, int as):name(n), EPCost(cp), castTime(ct), AoESize(as) {}
virtual ~Art() {}
static Art* findArt(std::string ID);
int getAoESize() {return AoESize;}
std::string getName() {return name;}
int getEPCost() {return EPCost;}
virtual int getBaseDamage() = 0;
};
子类;
class FireBolt:public Art {
static const std::string name;
static const int EPCost;
static const int castTime;
static const int AoESize;
static const std::string ID;
public:
FireBolt():Art(name, EPCost, castTime, AoESize) {}
~FireBolt() {}
int getBaseDamage();
};
您需要做的就是公开您的FireBolt::ID
。
class FireBolt:public Art {
public:
static const std::string ID;
...
};
Art* Art::findArt(const std::string& ID)
{
if (ID == FireBolt::ID)
return new FireBolt(...);
...
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 用户创建的类对象实例化的未申请标识符
- 如何从标识符创建类?
- 错误:标识符类名未定义?为我在文件中创建的所有类获取此内容
- 视觉 在调用它时用 c++ 创建一个方法后,我得到的错误标识符未找到
- 在C++中,如何创建一个映射,其值是protobuf扩展标识符
- C++ 无法创建具有标识符的对象
- 在编译时创建一个标识符,其中包含行号作为标识符的一部分
- "未声明的标识符",同时尝试在 C++ 中创建实例
- 尝试创建结构实例时C++未声明的标识符
- 宏用于创建多个用于测试的相似标识符
- 为iOS设备创建唯一标识符
- 创建的对象总是未定义,并且在初始化构造函数时期望有标识符
- 如何创建具有多个标识符的函数