基于模板的类变量

Template Based Class Variable

本文关键字:类变量 于模板      更新时间:2023-10-16

我正在开发一个游戏,我想创建一个基本 Actor 类,该类包含各种 Actor 类型之间共享的 Stat 值,但我在理解如何在没有基类具有与 actor 类型不同的 Stats 变量的情况下完成此操作时遇到了问题......

这正是我现在所做的(如代码所示(......但是,我想以某种方式使BaseActor"stats"类型在创建时成为PlayerStats或MonsterStats对象...这样,PlayerActor 和 MonsterActor 不再需要不同的"monster_stats"和"player_stats"对象,因为它们从 BaseActor 继承了正确的类型。这可能吗?我认为可以通过模板来完成,但我不太精通这些模板。

class BaseStats {
public:
int defense;
private:
};
class MonsterStats : public BaseStats {
public:
int drop_rate;
private:
};
class PlayerStats : public BaseStats {
public:
int attack_power;
private:
};
class BaseActor {
public:
BaseStats stats;
private:
};
class MonsterActor : public BaseActor {
public:
MonsterStats monster_stats;
private:
};
class PlayerActor : public BaseActor {
public:
PlayerStats player_stats;
private:
};

PlayerStatsMonsterStats派生自BaseStats。让每个派生BaseActor的构造函数分配统计信息:

MonsterActor::MonsterActor()
{
m_stats = make_shared<MonsterStats>();
}

并有

std::shared_ptr<BaseStats> m_stats;

在基类中。

寻找杰弗里的答案以获得更好的方法。但是,由于您想通过模板执行此操作(不推荐(:-

template <typename T>
class BaseActor {
public:
T stats;
};
class MonsterActor : public BaseActor<MonsterStatus> {
public:
};
class PlayerActor : public BaseActor<PlayerStatus> {
public:
};