我需要编写一些代码来处理多种像素格式(例如 A8R8G8B8、R8G8B8、R5G6B6,甚至可能是浮点格式)。
理想情况下,我不想为每种格式编写每个函数,因为这是大量几乎相同的代码。
我唯一能想到的是某种接口(interface)让它处理像素格式转换,例如:
class IBitmap
{
public:
virtual unsigned getPixel(unsigned x, unsigned y)const=0;
virtual void setPixel(unsigned x, unsigned y, unsigned argb)=0;
virtual unsigned getWidth()const=0;
virtual unsigned getHeight()const=0;
};
然而,为每个获取或设置像素操作调用虚函数并不快,因为不仅存在虚调用的额外开销,而且更重要的是,它还阻止了对只有几条指令长的内容进行内联。
是否有任何其他选项可以让我有效地支持所有这些格式?一般来说,我的代码可能只对位图的一小部分进行操作,并且在许多情况下需要读/写访问权限(混合)。
最佳答案
考虑使用模板。这将允许您在可能的情况下进行通用编写,并在编译时对代码进行专门化处理
有时称为静态多态性。 http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern
关于c++ - 支持多种像素格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676850/