6

C++0x では、基本的に型の型を定義できる概念が導入されています。type に必要なプロパティを指定します

C#では、" where " 句を使用してジェネリックの制約を指定できます。

それらの間に意味的な違いはありますか?

ありがとうございました。

4

1 に答える 1

9

C++ テンプレートと C# ジェネリックはまったく同じではないことに注意してください。これらの違いの詳細については、この回答を参照してください。

C++0x の概念を説明するためにリンクしたページから、C++ では、テンプレート型が特定のプロパティを実装することを指定できるようにしたいという考えのように思えます。C# では、制約はそれよりも先に進み、ジェネリック型がその制約の "of" になるように強制します。たとえば、次の C# コードは次のとおりです。

public GenericList<T> where T : IDisposable

T の代わりに使用される型は、IDisposable インターフェイスを実装する必要があると述べています。同様に、次のコード:

public abstract class ABC {}
public class XYZ : ABC {}

public GenericList<T> where T : ABC

T の代わりに使用される型は、ABC 型であるか、ABC から派生したものでなければなりません。

C++0x の概念では、T の代わりに使用される型は、ABC (または IDisposable) で定義されたものと同じプロパティを持たなければならないというだけであり、その型でなければならないということではありません。

于 2009-01-31T00:21:16.793 に答える