我正在寻找作为编译时 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/