Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存储算法可能需要的项集合_C++ - Fatal编程技术网

C++ 存储算法可能需要的项集合

C++ 存储算法可能需要的项集合,c++,C++,我有一个类MyClass,它存储PixelDescriptor*对象的集合。MyClass使用策略模式样式对象指定的函数(称为DescriptorFunction)为每个描述符执行某些操作: void MyFunction() { descriptorA = DescriptorCollection[0]; for_each descriptor in DescriptorCollection { DescriptorFunction->DoSomething(descript

我有一个类MyClass,它存储PixelDescriptor*对象的集合。MyClass使用策略模式样式对象指定的函数(称为DescriptorFunction)为每个描述符执行某些操作:

void MyFunction()
{
 descriptorA = DescriptorCollection[0];
 for_each descriptor in DescriptorCollection
  {
  DescriptorFunction->DoSomething(descriptor)
  }
}
但是,只有当描述符属于描述符函数知道如何处理的类型时,这才有意义。也就是说,并不是所有描述符函数都知道如何处理所有描述符类型,但只要存储的描述符属于指定的访问者所知道的类型,就一切正常

如何确保计算出正确类型的描述符?更糟糕的是,如果策略对象需要不止一种类型的描述符怎么办

我在考虑创建一个复合描述符类型,类似于:

class CompositeDescriptor
{
 std::vector<PixelDescriptor*> Descriptors;
}
类复合脚本程序
{
向量描述符;
}
然后,可以将复合脚本传递给DescriptorFunction。但是,我如何确保CompositedDescriptor中存在正确的描述符呢

作为一个更具体的例子,假设一个描述符是颜色,另一个是强度。一种策略可能是平均颜色。另一个策略可能是平均强度。第三种策略可能是选择平均颜色或平均强度中较大的一种

我曾考虑过另一个策略风格的类,名为DescriptorCreator,由客户机负责设置。如果提供了ColorDescriptorCreator,那么ColorDescriptorFunction将拥有它所需要的一切。但让客户负责正确配对似乎不是个好主意

有什么想法/建议吗

编辑:针对Tom的评论,提供更多信息:

本质上,描述符功能是比较图像中的两个像素。这些比较可以通过多种方式进行(除了查找像素本身之间的绝对差异)。例如1)计算像素周围区域(以像素为中心)中相应像素的平均值。2) 计算一个更奇特的“描述符”,它通常在每个像素处生成一个向量,并按元素平均两个向量的差值。3) 比较与外部数据中的像素位置相对应的3D点等

我遇到了两个问题

1) 我不想计算该策略内部的所有内容(如果该策略只是将2个像素作为参数进行比较),因为该策略必须存储大量其他数据(图像、涉及描述一些无效区域的掩码等),我认为它不应该对此负责

2) 其中有些东西计算起来很昂贵。我必须这样做数百万次(被比较的像素总是不同的,但是每个像素的特征不会改变),所以我不想计算任何特征超过一次。例如,考虑策略函数比较花式描述符。在每次迭代中,将一个像素与所有其他像素进行比较。这意味着在第二次迭代中,必须再次计算所有特征,这是非常冗余的。这些数据需要存储在所有策略都可以访问的地方——这就是为什么我试图在主客户机中保留一个向量


这是否澄清了问题?谢谢你迄今为止的帮助

第一部分听起来像是一个合适的例子。访问者可以忽略它不想处理的任何类型

如果它们需要不止一种描述符类型,那么它是一种完全不同的抽象。你的描述有点模糊,所以很难说确切该做什么。我怀疑你想得太多了。我之所以这样说,是因为通常为算法选择参数是一个高度关注的问题

我认为最好的建议是尝试一下

我会用具体的参数(或者存根,如果理解得很好的话)来编写每个算法。编写代码将集合转换为具体参数。如果有一个抽象要做,它应该是显而易见的,而写你的翻译。为这些翻译编写一些choice helper函数通常是大部分工作


给出一个具体的描述符示例和一些示例声明可能会提供足够的信息来提供更多的指导。

谢谢Tom,我很快会回复你:)我在原始问题的底部添加了几段。