如何正确地完成模板类的模板?

时间:2014-06-10 10:17:44

标签: c# .net templates

我对一个类有以下定义(我使用图表,试图以通用方式使用它们)。

public class SparseGraph<NodeType, EdgeType> : IGraphType<NodeType, EdgeType>
where NodeType : INode
where EdgeType : IEdge
{
...
}

public class ConcreteNode : INode
{
...
}

public class ConcreteEdge : IEdge
{
...
}

public class PathFinder<GraphType, NodeType, EdgeType> where GraphType<NodeType, EdgeType> : IGraphType<NodeType, EdgeType>
where NodeType : INode
where EdgeType : IEdge
{
...

...
}

每次我必须实例化PathFinder类,即SparseGraph时,我必须使用以下声明来实现:

var a = new PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>()

PathFinder类具有模板的模板。就个人而言,我不喜欢这种&#34;冗余&#34;在这种类型的实例化。有没有办法将类PathFinder的签名减少到&#34; public class PathFinder&#34;?

2 个答案:

答案 0 :(得分:2)

继承自

PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>

public class NewClass : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>

答案 1 :(得分:2)

我个人会为你正在使用的每个常见案例实现更具体的子类型,例如在&#34; SparseGraph&#34;

的情况下
public class SparseGraphPathFinder : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
{

}