c# - 如何正确地做模板类的模板?

标签 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 类有一个模板的模板。我个人不喜欢这种类型实例化的这种“冗余”。有什么方法可以将 PathFinder 类的签名减少为类似“public class PathFinder”的东西吗?

最佳答案

就我个人而言,我会为您使用的每个常见情况实现更具体的子类型,例如“SparseGraph”

public class SparseGraphPathFinder : PathFinder<SparseGraph<ConcreteNode, ConcreteEdge>, ConcreteNode, ConcreteEdge>
{

}

关于c# - 如何正确地做模板类的模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138441/

相关文章:

c# - 无法将几何分配给 Button 剪辑属性

c# - 在 visual studio 2013 中设置发布项目

c# - 如何从 .net 3.5 SP1 中提供的 wpf WebBrowser 进行打印?

C# - : String. Contains() 或 Regex.isMatch() 哪个更快?

c++ - 在 C++ 中是否可以创建像 read<type>() 这样的通用函数?

c++ - 检查成员函数时 SFINAE 测试失败

c# - 未找到 System.ComponentModel.DataAnnotations.Schema

c# - 解析 DateTime 实例

c++ - 函数或参数作为模板参数?

c# - 单元测试,具有许多数据库调用的项目