在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一样。
非常感谢任何帮助!
答案 0 :(得分:2)
要说清楚,你想这样做:
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这样的东西是可口的。这确实反映了这些类完全不相关的现实。
答案 1 :(得分:0)
C ++中没有静态类的概念,即使在C ++ / CLI中也没有。这已经讨论过了here。
但是,如果你想在静态类中模拟事物,解决方法是放置一些静态函数,可以调用它来初始化静态成员而不创建实例。
class Test
{
public:
static int InitializeGenerics(...);
}
可以轻松调用Test::InitializeGenerics()