template
class NodeT {
public:
/* A node has a q vector, a parent ptr and a cost used externally for computation like finding the shortest path */
T q;
NodeT *parent;
double cost;
/**
* Constructor
*
* @param[in] q A q vector
* @param[in] parent Parent node pointer
* @param[in] cost Cost of the node that may be set during finding shortest path
*/
NodeT(const T &q, NodeT *parent = nullptr, double cost = 0.0) : q(q), parent(parent), cost(cost) {}
/**
* A hash function that uniquely identifies a node based on its q vector
*
* @param[in] hash A node
* @param[out] hash A string representing the node
*/
static inline std::size_t hash(const NodeT &node)
{
static THash f;
return f(node.q);
}
/* A wrapper of hash that is to be used by an unordered map on a Node */
struct Hash {
std::size_t operator()(const NodeT &node) const
{
return hash(node);
}
};
};
< /code>
И я пытаюсь определить шаблонную версию этого класса следующим образом: < /p>
template
class GraphT {
public:
typedef NodeT NodeInt;
typedef EdgeT EdgeInt;
typedef std::unordered_set NodesSet;
NodesSet _nodes;
}
Это похоже на то, что он должен компилировать, но на линии std :: unoromeded_set x; он не удается с ошибкой:
: type/value mismatch at argument 2 in template parameter list for ‘template class std::unordered_set’
std::unordered_set x;
note: expected a type, got ‘GraphT::NodeInt:: Hash’
У меня есть собственный шаблонный узел следующим образом: < /p> [code]template class NodeT { public: /* A node has a q vector, a parent ptr and a cost used externally for computation like finding the shortest path */ T q; NodeT *parent; double cost;
/** * Constructor * * @param[in] q A q vector * @param[in] parent Parent node pointer * @param[in] cost Cost of the node that may be set during finding shortest path */ NodeT(const T &q, NodeT *parent = nullptr, double cost = 0.0) : q(q), parent(parent), cost(cost) {}
/** * A hash function that uniquely identifies a node based on its q vector * * @param[in] hash A node * @param[out] hash A string representing the node */ static inline std::size_t hash(const NodeT &node) { static THash f; return f(node.q); }
/* A wrapper of hash that is to be used by an unordered map on a Node */ struct Hash { std::size_t operator()(const NodeT &node) const { return hash(node); } };
}; < /code> И я пытаюсь определить шаблонную версию этого класса следующим образом: < /p> template class GraphT { public: typedef NodeT NodeInt; typedef EdgeT EdgeInt;
typedef std::unordered_set NodesSet; NodesSet _nodes; } [/code] Это похоже на то, что он должен компилировать, но на линии std :: unoromeded_set x; он не удается с ошибкой: [code]: type/value mismatch at argument 2 in template parameter list for ‘template class std::unordered_set’ std::unordered_set x;
note: expected a type, got ‘GraphT::NodeInt:: Hash’ [/code] Почему это так?
У меня есть класс шаблона контейнера, который внутренне объединяет std::vector типа T, где T на самом деле является указателем на тип S. Я хочу создать функцию-член Insert_sorted, которая реализуется только в том случае, если тип S, T указывает на,...
У меня есть класс шаблона контейнера, который внутренне объединяет std::vector типа T, где T на самом деле является указателем на тип S. Я хочу создать функцию-член Insert_sorted, которая реализуется только в том случае, если тип S, T указывает на,...
У меня есть класс шаблона контейнера, который внутренне объединяет std::vector типа T, где T на самом деле является указателем на тип S. Я хочу создать функцию-член, Insert_sorted(), которая реализуется только в том случае, если тип S, T указывает,...
У меня есть приведенный ниже код, в котором я хочу, чтобы foo был реализован производным классом, но использовался в базовом классе методами bar. Но мне нужно, чтобы foo обрабатывал два случая, когда один из входных и выходных типов:...
У меня есть приведенный ниже код, в котором я хочу, чтобы foo был реализован производным классом, но использовался в базовом классе методами bar. Но мне нужно, чтобы foo обрабатывал два случая, когда один из входных и выходных типов:...