是否可以将方法存储在c ++中的某种类型的向量中?

问题描述 投票:2回答:1

这是我第一次来这里。

我目前正在尝试通过遍历所有像素并对那里的颜色做些事情来编写用于后期处理图像的类。

我的想法是添加posterize()rgbSplit()等方法。初始化它们时,每种效果都不会遍历所有像素,因为效果不是很好。我希望它存储这样一个事实,即当我使用称为process()的方法时,它应在给定的链中处理这些影响。

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

问题是,我不知道如何将方法存储在向量中。那有可能吗?还是矢量仅用于对象?还是我可以以某种方式“客观化”一种方法?还是我现在要做的是什么?

c++ image vector chaining juce
1个回答
0
投票

这个问题非常广泛。但我知道您才刚刚起步,需要在编写一些代码之前先知道是否有可能。

所以这里是一个简短的低级答案:

  • 是的,您可以具有function pointers的向量;
  • 是的,您可以拥有std::function的向量,它比原始函数指针更强大和灵活;
  • 是的,您可以通过将方法作为虚拟函数放在类中并像使用函数一样使用它来“物化”方法(使用方法名称并实现std::function,或使用command pattern实现经典方法) operator())。
  • 是的,您甚至可以通过将数组替换为functor的变体,以更灵活的方式链接不同的栅格操作>
  • 但是在更高的层次上,您需要更好地考虑您的设计:

  • [某些图像滤镜可以在像素级别工作,然后您的方法就可以了
  • 但是某些图像滤镜可在一组相邻像素上工作。如果要逐个像素工作,则链接将无法正常工作,因为在处理的组中将存在已变换的像素和仍未转换的原始像素。
  • 因此,您的设计需要同时处理两种算法。例如,您可以首先将链中的初步像素变换应用于所有像素,然后仅在已变换像素的组上运行算法,然后在链中继续进行。

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

© www.soinside.com 2019 - 2024. All rights reserved.