我修改模板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