我知道在C++中,泛型实际上并不存在,但你可以使用它来模拟它template.构建代码时,编译器预处理代码并生成一个新代码,其中通用值替换为对象声明中指定的实际值,然后是真正编译的新代码.例如,假设我们有A如下类:
template<class T>
class A
{
T f();
};
Run Code Online (Sandbox Code Playgroud)
然后在我们的代码中的其他地方A<int> a;.编译的实际代码是:
class A
{
//Replaces T by int in the pre-processing
int f();
};
Run Code Online (Sandbox Code Playgroud)
在整个介绍之后,让我们谈谈.
我的问题是:
这是一个非常广泛的主题,可以通过以下方式更好地解释:
http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx
要sumarize(从上面链接的MSDN文章):
C#泛型不提供与C++模板相同的灵活性.例如,虽然可以调用用户定义的运算符,但不可能在C#泛型类中调用算术运算符.
C#不允许非类型模板参数,例如模板C {}.
C#不支持显式专业化; 也就是说,特定类型的模板的自定义实现.
C#不支持部分特化:类型参数子集的自定义实现.
C#不允许将type参数用作泛型类型的基类.
C#不允许类型参数具有默认类型.
在C#中,泛型类型参数本身不能是通用的,尽管构造的类型可以用作泛型.C++确实允许模板参数.
C++允许对模板中的所有类型参数可能无效的代码,然后检查用作类型参数的特定类型.C#要求类中的代码以这样的方式编写,即它将适用于满足约束的任何类型.例如,在C++中,可以编写一个函数,该函数在类型参数的对象上使用算术运算符+和 - ,这将在使用不支持这些运算符的类型实例化模板时产生错误.C#不允许这样做; 允许的唯一语言结构是可以从约束中推导出的结构.
通常,虽然它们在大多数情况下共享相似的语法和用法,但在使用和功能方面存在许多巨大差异.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |