相当简单的问题:
我有一个使用(可变)启发式函数来执行特定算法的类。理想情况下,这个启发式函数应该作为某种指针提供给类构造函数并实现以下声明:
int heuristic_Function(GridLocation a, GridLocation b);
实现此目标的最佳方法是什么?理想情况下,我希望避免额外的类并保持代码相当独立(是的,我知道诸如委托(delegate)和策略模式之类的事情)。
(这可能已经被问过数百次,但用的是不同的术语)
最佳答案
好吧,正如您所说,您可以存储一个函数指针:
struct Algo
{
using HeurFn = int(GridLocation, GridLocation);
Algo(HeurFn * heuristic) : heuristic_(heuristic) {}
void Run()
{
// use "heuristic_(a, b)"
}
HeurFn * heuristic_;
};
然后实例化它:
extern int my_fn(GridLocation, GridLocation);
Algo algo(my_fn);
algo.Run();
另一种方法是将函数直接传递给 Run
,在这种情况下,您可以使 Run
成为一个模板,并可能允许内联实际的启发式代码,但是您明确要求通过构造函数配置启发式。
关于c++ - 具有特定参数列表的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34387119/