C 将功能实现对象作为接口类型
C++ pass to function implementation object as interface type
我的接口看起来像这样:
class GameObject
{
public:
virtual ObjType getType() = 0;
virtual void setType(ObjType ot) = 0;
protected:
ObjType objtype;
};
然后我有实现此接口的类
class SpriteObject : public GameObject
{
public:
SpriteObject();
virtual ~SpriteObject();
ObjType getType() { return objtype; }
void setType(ObjType ot) { objtype = ot; }
private:
};
class LayerObject : public GameObject
{
public:
LayerObject ();
virtual ~LayerObject ();
ObjType getType() { return objtype; }
void setType(ObjType ot) { objtype = ot; }
private:
};
在主类中,我具有将SpriteObject传递到的功能看起来这样:
bool HelloWorld::NodeAction(GameObject* &pGameObj)
{
}
当我尝试这样做时:
SpriteObject *pSpriteObject = new SpriteObject();
NodeAction(pSpriteObject);
我遇到此错误:
error C2664: 'bool HelloWorld::NodeAction(GameObject *&)' : cannot convert argument 1 from 'SpriteObject *' to 'GameObject *&'
最后,我想拥有可以获得实现GameObject的不同对象的全局函数。
此功能:
bool HelloWorld::NodeAction(GameObject* &pGameObj)
期望GameObject*
的非CV LVALUE参考。
因为pSpriteObject
是类型SpriteObject *
的lvalue,因此没有匹配函数要呼叫,因此它将尝试使用隐式转换来查找这些转换的过载函数:
lvalue to rvalue conversion
任何非功能,非阵列T型T的glvalue可以隐式转换为相同类型的序言。如果t是非类型的类型,则此转换也删除了CV-Qualifier。
指针转换
可以将(可选的是CV合格的)派生类类型的指针转换为prvalue指针,转换为其(相同CV征值)基类。
因此,这条线
nodeaction(pspriteObject);
期望具有其中一个原型的功能:
bool HelloWorld::NodeAction(GameObject*)
bool HelloWorld::NodeAction(GameObject* const&)
bool HelloWorld::NodeAction(GameObject* &&)
所有人都是可以接受的,但
bool HelloWorld::NodeAction(GameObject*)
应该优先考虑,请参阅此问题。使用原始类型,即使PRE-C 11
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 无法使用接口类型对priority_queue中的对象进行排序<T>
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 防止通过接口删除对象
- 如何正确存储/传递接口类型的变量(现代 c++)?
- C++实现相同接口的对象/类之间的数据共享
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- 在C++中创建接口的对象
- <T> 从类型对象创建类型<T1>对象的构造函数
- 如何根据接口类型运行
- C 将功能实现对象作为接口类型
- 继承和 2 种接口类型
- C++是否有现有的方法来检查对象是否是派生类型对象
- 在 C# 中加载 COM 对象会引发异常"无法将类型'System.__ComObject'的 COM 对象强制转换为接口类型...",但C++或 VB 不会