我正在修改模板化 A* 搜索,现在有以下类(部分):
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;
//...
}
直到现在,我还没有想到将启发式参数模板化,所以 Node
类定义如下:
template <typename T = float>
class Node
{
public:
// Typedefs:
typedef typename AStar<Node>::PriorityQueueType::handle_type HeapHandle;
//...
}
但现在自AStar
采用第二个模板参数作为启发式,typedef 在此处给出编译错误:typedef typename AStar<Node ??>...
.是否有可能以某种方式使这项工作同时保持在 AStar
中指定启发式的自由?类(class)?
最佳答案
您可以以不同的方式分解您的代码,并将与启发式无关的部分分开:
namespace detail
{
template <typename T>
struct AStarHeap
{
using QueueType = /* ... */;
using HandleType = QueueType::handle_type;
// ...
};
}
template <typename Node, typename Heur>
struct AStar : detail::AStarHeap<Node>
{
// ...
};
template <typename T>
struct Node
{
using HeapHandle = typename detail::AStarHeap<T>::HandleType;
// ...
};
关于c++ - 模板相关的类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309501/