有没有办法在 C++ 中的某种类型的向量中存储方法?

Flo*_*lla 4 c++ image vector chaining juce

这是我第一次来这里。

我目前正在尝试通过遍历所有像素并对那里的颜色进行处理来编写一个用于后处理图像的类。

我的想法是添加诸如posterize()rgbSplit()等之类的方法。当它们被初始化时,它不会遍历每个效果的所有像素,因为这不是很有效。我希望它存储这样一个事实,即当我使用名为process().

但是因此我必须将效果代码的引用存储在列表中(如向量),对吗?因为那样我就可以进入forx 和 y 坐标的-loop 并在那里添加另一个 for 循环,它遍历应该应用于像素的所有方法。

问题是,我不知道如何在向量中存储方法。这甚至可能吗?还是矢量仅适用于对象?或者我可以以某种方式“客观化”一个方法?或者我现在必须做的事情是什么?

Chr*_*phe 5

这个问题非常广泛。但是我知道您还处于起步阶段,在编写一些代码之前需要知道是否可能。

所以这里有一个快速的低级答案:

  • 是的,您可以拥有函数指针向量;
  • 是的,您可以拥有 的向量std::function,它比原始函数指针更强大和灵活;
  • 是的,您可以“对象化”一个方法,方法是将其作为虚函数放入类中并像函数一样使用它(使用方法名称并实现命令模式,或operator()用于实现经典函子)。
  • 是的,您甚至可以通过用责任链模式的变体替换数组,以更灵活的方式链接不同的栅格操作

但是在更高的层次上,您需要更好地考虑您的设计:

  • 一些图像过滤器可以在像素级别工作,然后你的方法很好
  • 但是一些图像过滤器对一组相邻像素起作用。如果您逐个像素地工作,则链接将无法正常工作,因为在处理的组中将有已转换的像素和原始未转换的像素。

所以你的设计需要同时处理这两种算法。例如,您可以首先将链中的初步像素变换应用于所有像素,然后仅对已变换的像素组运行算法,然后在链中继续。

此外,正如Daniel McLaury在评论中指出的那样,另一个问题是,从性能的角度来看,逐个像素地调用算法是否有意义。也许链接算法是个好主意,但在图像转换级别而不是像素级别。

一旦您考虑到这一点,并开始使用上述想法之一实施解决方案,您可能会带着更精确的问题回到这里,并用一些代码进行说明。