template <class VertexType>
class GraphMatrix
{
};

template <class GraphType>
class Graph
{
 typedef typename GraphType::VertexType VertexType;
 GraphType* graph_;
 void addVertex(VertexType vertex)
 {
 }
 //...
};
int main()
{
    Graph <GraphMatrix <int> > graph;
    return 0;
}


看看我是否将typedef VertexType VertexType;//A行添加到GraphMatrix class此代码将通过编译并且可以工作,否则会产生编译错误。错误:C2039:'VertexType':不是'GraphMatrix'的成员。我的问题是“是否有一种方法(语法)在不添加此愚蠢行//A的情况下使上述代码起作用?”?

最佳答案

您始终可以编写VertexType的全限定名称,typedef只是您的快捷方式,它将名称带入范围并允许您编写更简洁的代码。

因此,在这种情况下,没有其他办法。

但是,在使用继承时,您可以using BaseClass::something将其纳入范围。

10-08 11:32