如何为启发式函数编写c ++概念

问题描述 投票:1回答:1

我正在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。

c++ c++20 heuristics concept
1个回答
1
投票

我想让编译器签入h(to)等于0的编译时间。

© www.soinside.com 2019 - 2024. All rights reserved.