我可以传递从模板类继承的对象类吗
can i pass object class that is inherited from template class?
如何将从模板继承的对象传递给函数
请参阅GameObj::GameObj构造函数我尝试传递继承BaseGameObject模板的GameObj但它不是有效的
template<typename T>
class BaseGameObject
{
public:
BaseGameObject(){};
virtual ~BaseGameObject(){};
static T* create(IImageComponent* imageComponent)
{
}
protected:
IImageComponent* m_IImageComponent;
};
class GameObj :public BaseGameObject<GameObj>
{
public:
GameObj(IImageComponent* imageComponent);
virtual ~GameObj(){};
};
GameObj::GameObj(IImageComponent* imageComponent):m_IImageComponent(imageComponent)
{
m_IImageComponent->update(*this); //HERE IS THE PROBLEM IT ASK ME TO PASS TAMPLATE
}
class GameObjImageCompnent
{
public :
GameObjImageCompnent(const std::string &spritefilename);
virtual void update(BaseGameObject& baseGameObject);
private:
std::string m_spritefilename;
};
GameObjImageCompnent::GameObjImageCompnent(const std::string &spritefilename):
m_spritefilename(spritefilename)
{
;
}
void GameObjImageCompnent::update(BaseGameObject& baseGameObject)
{
baseGameObject.setInitWithSpriteFrameName(m_spritefilename);
}
此链接不适用于我:将模板类作为参数传递给方法
BaseGameObject
是一个模板。CCD_ 2具有声明CCD_。这是错误的,因为BaseGameObject
不是一个类型,而是一个模板。
也许您应该将声明更改为:virtual void update(BaseGameObject<GameObj>& baseGameObject);
如果你需要能够用不同的BaseGameObject
调用它,你也可以将GameObjImageCompnent
制作成一个模板:
template<class T>
class GameObjImageCompnent {
// ...
virtual void update(BaseGameObject<T>& baseGameObject);
如果这不是一个选项,您可能需要从非模板基类继承BaseGameObject,并将其用作引用类型。如果BaseGameObject
的基类也不是一个选项,那么您需要重新考虑您的设计。
class IGameObject {
public:
virtual ~IGameObject() {}
// any other virtual functions that are needed
};
template<typename T>
class BaseGameObject: public IGameObject {
//...
class GameObjImageCompnent {
// ...
virtual void update(IGameObject& baseGameObject);
你似乎在使用CRTP。请参阅陷阱部分:
静态多态性的一个问题是,如果不使用像上面例子中的"Shape"这样的通用基类,您就无法异构存储派生类,因为每个CRTP基类都是唯一的类型。出于这个原因,您可能想要从具有虚拟析构函数的共享基类继承,就像上面的例子一样。
我认为这种限制也适用于通过异构引用将派生类的对象传递给函数。
相关文章:
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 使用智能指针附加的继承对象的深层复制
- 虚拟类继承对象大小问题
- 基对象和继承对象,用于将标准变量包装在C++中
- 为什么私有继承对象允许成员函数将派生的*转换为基*,而外部不能
- 是否有一种方法可以专门使用继承对象的一般方法
- 如何将接口对象强制转换为特定的继承对象
- MFC C++ 无法在动态创建的 CButton 继承对象上设置映像
- 在容器中存储多个继承对象
- QObject基类到继承对象的C++类型转换
- C++ 中的继承对象和属性丢失
- 继承对象列表 - C++
- 静态分配继承对象的数组
- 正确实例化双重继承对象
- 我是否需要使用继承对象(相对于基对象)覆盖我的虚函数?
- c++继承.对象调用超类方法而不是自己的方法
- 基对象和继承对象的向量
- 将多继承对象转换为void*或从void*转换为多继承对象
- 如何在c++中表示继承对象的树?
- 继承对象上指针算术的安全性