我修改模板A *搜索现在有下面的类(部分):模板依赖的typedef
template <typename TNode, typename THeuristic>
class AStar
{
public:
// Typedefs.
typedef d_ary_heap<TNode*, boost::heap::compare<NodeCompare<TNode>>, boost::heap::arity<4>, boost::heap::mutable_<true>> PriorityQueueType;
//...
}
到现在为止,我没有想到templatizing启发式参数,所以Node
类定义如下:
template <typename T = float>
class Node
{
public:
// Typedefs:
typedef typename AStar<Node>::PriorityQueueType::handle_type HeapHandle;
//...
}
但现在因为AStar
需要第二个模板paremeter为启发式的typedef这里给出了一个编译错误:typedef typename AStar<Node ??>...
。是否可以在保持自由指定AStar
类中的启发式的同时以某种方式进行此项工作?
我可能会误解你的问题,但不会给出默认的'THeuristic'(你已经知道该怎么做 - 你在Node中使用它)就足够了吗? – hvd
但是,如果我使用不同于默认的启发式启发式,那么它会工作吗? 'HeapHandle'与正确的类型不同,不是吗? –
'PriorityQueueType' typedef不依赖于'THeuristic'模板参数,因此它为所有可能的'THeuristic'提供相同的类型。 – hvd