2

C# では、次のように記述できます。

public static class Test
{
}
public class Test<T>
{
}

C++/CLI で同じことを行うにはどうすればよいですか?

私は定義しようとしました:

public ref class Test abstract sealed
{
};

generic<typename T>
public ref class Test
{
};

しかし、C2011 エラーが表示されます:「'クラス' 型の再定義。

System.Tuple のように、ジェネリック クラスのインスタンスを作成するための便利なメソッドを定義する静的クラスを作成したいと考えています。

どんな助けでも大歓迎です!

4

2 に答える 2

3

明確にするために、あなたはこれをしたいです:

generic<typename T>
public ref class Test {};

generic<typename T, typename U>
public ref class Test {};

C ++/CLIではそれを行うことはできません。CLRで許可されていることを考えると、これは欠陥です。しかし、それはC++から継承したものです。C ++ / CLI言語は、C ++コンパイラの多くの配管を使用し、プロセスでその命名規則を継承します。connect.microsoft.comに投稿できますが、「設計上」としてすぐに閉じられます。

前進する唯一の適切な方法は、これらのジェネリック型をC ++ / CLIプロジェクトで参照するC#クラスライブラリに移動することです。または、残りのクラスの名前を変更するなどの妥協案を受け入れることで、Test2のようなものが口に合うようになります。これは、これらのクラスが完全に無関係であるという現実を反映しています。

于 2012-08-20T12:35:13.740 に答える
0

C++ には静的クラスの概念はなく、C++/CLI にもありません。これについては、ここで既に説明しています。

ただし、静的クラスのようにシミュレートする場合は、回避策として、インスタンスを作成せずに静的メンバーを初期化するために呼び出すことができる静的関数を配置することです。

class Test
{
 public:
  static int InitializeGenerics(...);
}

これは次のように簡単に呼び出すことができます。Test::InitializeGenerics()

于 2012-08-20T12:12:44.667 に答える