- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 C++ 的新手,一直在使用 OpenGL 开发基本的 3D 渲染引擎。我遇到以下问题:我有一个名为 GeomEntity 的类,它是所有几何基元的基类。我有另一个类称为 DefaultMaterial,它是所有 Material 的基类(由不同类型的着色器程序组成)。因为我将拥有多种类型的 Material 像:ColorMaterial、TextureMaterial、AnimatedMaterial 等等我需要在 GeomEntity 类中引用 Material ,以便从主应用程序我可以使用此功能设置任何 Material :
void GeomEntity ::addMaterial (const DefaultMaterial *mat){
material=mat;////material is the member variable pointer of type DefaultMaterial
}
但问题是,尽管所有这些 Material 都派生自 DefaultMaterial,但它们都有自己独特的方法,如果我默认将它们引用到 DefaultMaterial 变量,我将无法触发这些方法。因此,例如在主应用程序中:
Sphere sphere;
....
sphere.addMaterial(&animMaterial);///of type AnimatedMaterial
sphere.material->interpolateColor(timerSinceStart);
///doesn't happen anything as the sphere.material is
/// of type DefaultMaterial that has no interpolateColor() method
我知道我可以使用模板或强制转换,但我想听听 C++ 中这种多态性的最佳实践。在 Java 或 C# 中,我真的会使用这样的东西:
((AnimatedMaterial)sphere.material).interpolateColor(timerSinceStart);
最佳答案
在 C++ 中,您可以使用 dynamic_cast 执行此操作,我认为这是最接近 C# 功能的等效项:
AnimatedMaterial* panim = dynamic_cast<AnimatedMaterial*>(sphere.material);
if(panim)
panim->interpolateColor(timerSinceStart);
关于C++ 多态性和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7490603/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!