有没有类似于这个 C++ 模板的东西?
template <int A>
class B
{
int f()
{
return A;
}
}
我想让 B<1>、B<2> 等(例如元组)的每个实例都成为不同的类型。
原文由 Andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议
C# 不像 C++ 那样支持非类型泛型参数。
与 C++ 模板相比,C# 泛型要简单得多,功能也更差。 MSDN 有一份 关于 C++ 模板和 C# 泛型之间差异 的简洁列表。
原文由 James McNellis 发布,翻译遵循 CC BY-SA 2.5 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
简短的回答是 否定 的。
它不适合与 C++ 模板相对的 C# 泛型的工作方式。
.net 泛型不是语言功能,它们是运行时功能。运行时知道如何从特殊的泛型字节码中实例化泛型,这与 C++ 模板可以描述的内容相比受到了相当大的限制。
将此与 C++ 模板进行比较,后者基本上使用替换类型实例化类的整个 AST。可以将基于 AST 的实例化添加到运行时,但它肯定会比当前的泛型复杂得多。
如果没有像值类型数组这样的特性(只存在于不安全的代码中),递归模板实例化或使用这些参数的模板特化也不会很有用。