Когда я пытаюсь скомпилировать этот код:
struct BasicVertexProperties
{
Vect3Df position;
};
struct BasicEdgeProperties
{
};
template < typename VERTEXPROPERTIES, typename EDGEPROPERTIES >
class Graph
{
typedef adjacency_list<
setS, // disallow parallel edges
vecS, // vertex container
bidirectionalS, // directed graph
property<vertex_properties_t, VERTEXPROPERTIES>,
property<edge_properties_t, EDGEPROPERTIES>
> GraphContainer;
typedef graph_traits<GraphContainer>::vertex_descriptor Vertex;
typedef graph_traits<GraphContainer>::edge_descriptor Edge;
};
g ++ жалуется на следующую ошибку в строке "typedef graph_traits <>":
error: type 'boost::graph_traits<boost::adjacency_list<boost::setS, boost::vecS,
boost::bidirectionalS, boost::property<vertex_properties_t, VERTEXPROPERTIES,
boost::no_property>, boost::property<edge_properties_t, EDGEPROPERTIES,
boost::no_property>, boost::no_property, boost::listS> >' is not derived from type
'Graph<VERTEXPROPERTIES, EDGEPROPERTIES>'
Я обнаружил, что компилятор, похоже, не знает, что параметры моего шаблона являются типами, но указание "typename" перед ними в определении свойства не помогает.
Что не так? Я просто хочу иметь шаблонный класс Graph, чтобы иметь возможность использовать любые свойства, которые мне нравятся, производные от базовых структур свойств, определенных выше, поэтому у меня могут быть методы в этом Graph, которые работают с основными свойствами.