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 错误:“'class' 类型重新定义。

我想创建一个静态类,它定义了创建通用类实例的便捷方法,就像 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 回答