gpt4 book ai didi

c++ - 有没有办法在 C++ 中将方法存储在某种类型的 vector 中?

转载 作者:行者123 更新时间:2023-12-02 08:13:26 24 4
gpt4 key购买 nike

这是我第一次来这里。

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

我的想法是添加诸如 posterize()rgbSplit() 等方法。当它们初始化时,它不会遍历每个效果的所有像素,因为这是性能不太好。我希望它能够存储这样一个事实:当我使用名为 process() 的方法时,它应该稍后在给定链中处理这些效果。

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

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

最佳答案

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

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

  • 是的,您可以拥有 function pointers 的 vector ;
  • 是的,您可以拥有 std::function 的 vector ,比原始函数指针更强大、更灵活;
  • 是的,您可以通过将方法作为虚拟函数放入类中并像函数一样使用它来“对象化”方法(使用方法名称并实现 command pattern ,或使用 operator() 来实现经典 functor )。
  • 是的,您甚至可以通过用 chain of responsibility pattern 的变体替换数组,以更灵活的方式链接不同的光栅操作。

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

  • 某些图像过滤器可以在像素级别工作,那么您的方法就可以了
  • 但某些图像滤镜适用于一组相邻像素。如果您逐个像素地工作,则链接将无法正常工作,因为在处理的组中将存在已经变换的像素和仍然原始的未变换的像素。

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

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

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

关于c++ - 有没有办法在 C++ 中将方法存储在某种类型的 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60477691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com