c++ - 自定义 C++ 渲染系统中的性能比较。为不同的类调用渲染函数

标签 c++ pointers rendering

我有这个库,其中有一个用于不同类型元素的通用显示列表,对于系统的每个循环,这个显示列表是通过对添加到列表中的每个对象调用 render() 方法来呈现的。 现在,列表可以包含不同类的元素,比如 A、B、C、D,它们都有自己特定的 void render();

我已经找到了两种可行的方法,并且想听听哪种方法在速度方面的性能更好(或者如果有更好的方法不同于我正在评估的方法,请提出建议)。

选项 1: 最简单的方法是,我在 A、B、C..etc 类中的每一个共有的父类(super class)上有一个 int 类型变量,它标识该类的编号。因此,当显示列表正在呈现时,有一个很大的 switch() {} 询问类型,并根据此变量的值,对相应类进行强制转换以呈现它,例如:

case OBJ_A:
((ObjA*)obj)->render();
break;

那是因为所有对象都作为指向父类(super class)类型的指针添加到列表中。

选项 2: 使用函数指针。 (如 http://www.newty.de/fpt/functor.html 中所述)。 这里我们有一个模板仿函数类,它可以接收任何其他类作为参数并存储指向渲染函数的指针引用。所以当遍历它时,仿函数类将进行转换......我不知道这在运行时的含义。

感谢您对此的任何帮助!

最佳答案

为什么不用虚函数?

class Renderable {

public:

    virtual void Render() = 0;
};


class ARenderable : public Renderable {

public:

   virtual void Render() {
     // implement this
   }
}


class BRenderable : public Renderable {

public:

   virtual void Render() {
     // implement this
   }
}


// .. and then keep a list of Renderable's and call Render() on all of them
std::vector<Renderable*> rr;
rr.push_back(new ARenderable());
rr.push_back(new BRenderable());

// (pseudocode)
for each .. Renderable * r
   r->Render()

这三种情况下的运行时开销都是相似的——基本上,虚函数函数指针,只是非常优雅的指针;-)使用这种策略来解决此类问题在 C++ 中是惯用的,在对象中是基础面向编程。

关于c++ - 自定义 C++ 渲染系统中的性能比较。为不同的类调用渲染函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410291/

相关文章:

c++ - qt中通过clicked函数直接执行一个batch

c++ - 如何一次将多个值分配给一个结构体?

c - 从 C 中的指针指针 char 中删除字符串

指向成员函数的 C++ 指针,替代 __closure

c++ - 如何将网页绘制到内存DC中?

c++ - 如何避免 OOP 中的 "coupling"

c++ - 指针操作的未知使用

ios - UITableView在滚动期间停止渲染

javascript - 在 ThreeJS 中立即渲染

c++ - 如何在没有硬件抽象层的情况下直接访问x64硬件?