将变量设置为类型模板
Setting Variables as Type Template
所以我正在开发一个基于文本的RPG,但我遇到了一个问题。我正在研究角色从他们的库存中装备武器的能力。我有类型Weapon
,这是一个类型Item
的子类;我还有各种其他职业类型可以存储在玩家的物品栏中。我现在正在做的是确保玩家想要装备的物品是Weapon
型;在这方面,我正在使用模板(我对使用模板相当陌生(,以便我有某种通用类型进行测试。代码如下:
template <class T>
void MyCharacter::equipWeapon(){
Weapon testForEquipping;
T chosenWeapon;
chosenWeapon = myInventory.chooseItem();
if(typeid(chosenWeapon).name() == typeid(testForEquipping).name()){
//Haven't added what will happen with this part yet.
}
Weapon tempWeapon1 = equippedWeapon;
Weapon tempWeapon2 = chosenWeapon;
equippedWeapon = tempWeapon2;
chosenWeapon = tempWeapon1;
}
如您所见,我想将chosenWeapon
设置为与玩家物品栏中的所选物品相等;(这部分有效(。但是,问题出在我尝试在程序error: no matching function for call to 'MyCharacter::equipWeapon()'
中运行函数时出现的此错误中。尽管我对这个问题进行了研究,但我不明白我做错了什么!任何帮助或新建议将不胜感激。谢谢!
这需要在运行时完成,因此模板不是正确的工具。相反,您应该使用dynamic_cast
:
void MyCharacter::equipWeapon() {
Item item = myInventory.chooseItem();
if (Weapon* weapon = dynamic_cast<Weapon*>(&item)) {
// Equip the weapon
}
}
使用工厂方法设计模式:
"在基于类的编程中,工厂方法模式是一种创建模式,它使用工厂方法来处理创建对象的问题,而不必指定将要创建的对象的确切类。这是通过调用工厂方法(在接口中指定并由子类实现,或者在基类中实现并选择性地由派生类重写(来创建对象来完成的,而不是通过调用构造函数来完成的。
https://en.wikipedia.org/wiki/Factory_method_pattern
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?