gpt4 book ai didi

c++ - 初始化每个接受不同参数的算法的设计模式

转载 作者:行者123 更新时间:2023-11-30 01:28:59 25 4
gpt4 key购买 nike

我正在寻求重新设计我拥有的图书馆。
目前我有一套算法,它们之间没有任何关系。

我的目标是让所有具体算法实现一个接口(interface),该接口(interface)大致由 Init()Run(In,Out) 组成,这样我就可以在以下时尚:

void Process()
{
// IAlgotrithm* algX = new CAlgX(); X:{A,B,C}
IAlgorithm* algs[] = { algA, algB, algC };
for (int i=0; i < 3; i++) {
algs[i]->Init(...);
algs[i]->Run(In,Out);
}
}

问题是,目前每个算法都接受不同的结构作为其输入参数。
例如,CAlgA 有一个方法 Init(CAlgAParameter param),其中 CAlgAParameter 是一个包含特定于 AlgA 的字段的结构。每个算法都有自己的结构,由不同类型的完全不同的字段组成。解决这个问题的最佳方法是什么?

我能想到的一个选择是拥有一个包含与所有算法相关的所有参数的映射,并将初始化输入结构的工作委托(delegate)给算法。也就是说,算法的客户端不知 Prop 体的输入结构是什么样的——算法的工作是根据映射中的所有全局参数创建其输入结构。我不喜欢这个想法,因为它无法在编译时检查并且太容易出错。

解决这个问题的最佳方法是什么?
谢谢

最佳答案

为什么不在构造时初始化,直接在循环中调用Run()?因此,在构建时,您可以让用户负责为给定算法提供正确的配置,即

IAlgorithm* algs[] = { new CAlgA(CAlgAParameter(...)), new CAlgB(CAlgBParameter(...)), new CAlgC(CAlgCParameter(...)) }; 

//loop

使用异常处理算法的不正确配置。

关于c++ - 初始化每个接受不同参数的算法的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6744237/

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