c++ - 如何从标识符创建一个类?
问题描述
标题可能有点误导,但我想通过多态性给一个类的一些实例一个不同类的实例。我认为这可能更具误导性,所以我举个例子;
假设我有一个名为的类Spell
,即该类的父类Firebolt
。我希望另一个班级,例如Character
,能够在其记忆中拥有咒语“Firebolt”,而不必#include 'Firebolt' 的文件。
现在,我可以想到以前的游戏曾经这样做过的一种方式。通过给每个拼写(或任何其他特定的类类型)一个静态常量字符串 ID 或名称,并在拼写中具有一些可以访问此 ID/名称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(...);
...
}
推荐阅读
- javascript - React ant 设计表单验证不起作用(提交时)
- autocomplete - 自动完成和功能帮助在 Google App Script 新编辑器中相互重叠
- vue.js - 页面刷新时未加载与 Nuxt/Vue2/Axios 地图一起使用的传单
- visual-studio - “系统找不到指定的文件”的解决方法——首次启动Visual Studio
- java - 使用矩阵求幂查找(线性)递归关系中的第 n 项
- python - Lisp 和 clojure 代码在 Google KickStart 比赛重新输入问题上失败
- javascript - 挂载时计算父组件中多个子 React 组件的值的总和
- python - 当图层为 MarkerCluster 时,叶搜索插件返回“找不到位置”
- python - Python 进程(活动监视器)不会停止
- html - 如何在选择选项中添加字体真棒图标?