c++ - C++模板中的多步推理器

标签 c++ templates search functional-programming artificial-intelligence

我正在寻找作为编译时 C++ 模板实现的规划器/搜索算法的简单实现。这种东西的应用一部分是学术性的,一部分是代码验证的实际需求驱动的。

这是我正在寻找的本质:想象一个搜索算法来规划从“开始”状态到“结束”状态的 Action 。

template<A, B> struct Step{
   //all steps have:
   static void doAction();
}


struct Start{};
struct State1{};
struct State2{};
struct End{};


//Transition between neighbor-states is known:

template<> struct<Start, State1>{
     static void doAction(){
         std::cout << "Start -> State1" << std::endl;
     }
};

template<> struct<State1, State2>{
     static void doAction(){
         std::cout << "State1 -> State2" << std::endl;
     }
};

template<> struct<State2, End>{
     static void doAction(){
         std::cout << "State2 -> End" << std::endl;
     }
};

现在我想使用模板的魔力来找到一系列步骤(使用 SFINAE 或其他技巧)。如何实现以下目标?

 //TODO: Implement a reasoner:
 template<typename A, typename B, typename C> struct Step<A,C>{
    typedef Step<A,B> S1;
    typedef Step<B,C> S2;

    static void doAction(){
         S1::doAction();
         S2::doAction();
    }
 };


// Code using it:
Step<Start, State1>::doAction(); //Expect: "Start -> State1" 

Step<Start, State2>::doAction(); // Expect: "Start -> State1" 
                                 //         "State1 -> State2"

Step<Start, End>::doAction();    // Expect: "Start -> State1"
                                 //         "State1 -> State2"
                                 //         "State2 -> End"

最佳答案

这可能最好向后解决。定义 Path<End>::cost == 0并向后推理Path<State2,End>::cost==Path<End>::cost + 1因为有一个 Step<State2,End> .

你的 PathFinder但是,算法需要考虑所有状态的列表:根据您对状态和 Step<> 的定义,它无法发现它们。

关于c++ - C++模板中的多步推理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30635184/

相关文章:

c++:给定一个指针类型,如何恢复被指针类型?

C++ 预处理器 : avoid code repetition of member variable list

c++ - 检测墙壁或平面(使用 OpenCV)?

c++ - 尝试递归地实现幂函数和阶乘函数。 C++

c++ - 第二个 while 循环未运行,将值设置为 "nan"

c++ - 模板运算符重载基类

wordpress - 搜索页面上缺少自定义菜单

python - 使用 python 在大型 .txt 中进行二进制搜索(按哈希排序)

c# - 没有文件扩展名的C#搜索结果

c++ - Opencv 2.2 人脸检测最大尺寸