我正在c ++ 20中实现具有启发式功能的搜索算法。我试图用类似这样的概念来约束我的算法可以使用的功能:
template<typename SelfType, unsigned from, unsigned to>
concept Heuristic = requires(SelfType h, unsigned current)
{
{ h(current) } -> unsigned;
assert(h(to) == 0);
};
然后我可以写类似:
template<unsigned from, unsigned to>
struct H
{
unsigned operator()(unsigned current)
{
return to - current + 100;
}
};
当然断言不起作用,并且这不是有效的启发式方法,因为这里的h(to)为100。我想让编译器在编译时检查h(to)等于0。
我想让编译器签入h(to)等于0的编译时间。