- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我制作了一个场景图层次结构,其中每个节点都有一个父节点,可能还有一个子节点。我创建了这个 BaseNode 类
class BaseNode
{
public:
BaseNode(const char *nodeName, BaseNode *parent);
~BaseNode();
BaseNode* addChildSceneNode(const char *name);
void deleteChildSceneNode(const char *name);
void deleteAllChildSceneNodes();
BaseNode* findFirstSceneNode(const char *name);
BaseNode* getChildSceneNode(const char *name);
BaseNode* getChildSceneNode(unsigned int index);
void setName(const char *name);
void setTranformation(const glm::mat4 &transformation);
unsigned int getNumChildren() const { return _children.size(); }
const char *name() const { return _name.c_str(); }
BaseNode* parent() const { return _parent; }
const glm::mat4& transformation() const { return _transformation; }
const glm::mat4& toRootTransformation() const { return _toRoot; }
protected:
std::string _name;
glm::mat4 _transformation;
glm::mat4 _toRoot;
BaseNode *_parent;
std::vector<BaseNode*> _children;
};
我有这个继承自 BaseNode 的 SceneNode 类
class SceneNode : public BaseNode
{
public:
SceneNode(const char *nodeName, SceneNode *parent);
~SceneNode();
void attachRenderMeshData(RenderMeshData *renderMeshData);
const std::vector<RenderMeshData*>* renderMeshDatas() { return &_meshDatas; }
private:
std::vector<RenderMeshData*> _meshDatas;
};
现在我的问题是关于所有包含 BaseNode* 参数的成员函数。
目前,在使用 SceneNode 对象时,我必须按如下所示将 BaseNode* 显式转换为 SceneNode*
SceneNode *mySceneNode = new SceneNode("root", nullptr);
mySceneNode->addChildSceneNode("my child");
SceneNode *child = reinterpret_cast<SceneNode*>(mySceneNode->getChildSceneNode("my child")); //i thought this should be dynamic_cast but the compiler throws an error.. weird
我的目标是拥有“多种类型”的 BaseNode,这样我就不必每次都重写其父/子功能。
知道如何才能做得更好吗?
最佳答案
为什么不为您的 BaseNode
使用模板呢?类(class)?
这样您就可以在不同类型的 BaseNode 之间使用通用代码。
例如,制作一个SceneNode
, 你可以做 BaseNode<SceneNode>
.
An example on C++ class templates.
如果SceneNode
继承BaseNode
你可以简单地分配 SceneNode
到 BaseNode*
没有类型转换的类型。您可能还需要调用基类的构造函数。
class SceneNode : public BaseNode {
public:
SceneNode() : BaseNode("foo") {}
};
由此,如果您调用 s = new SceneNode
,您应该能够将 s 分配给 BaseNode*
的集合没有 Actor 。
关于c++ - 节点层次和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32313310/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!