.net 定义具有相同名称和不同类型参数数的泛型类(C+;+;/CLI)
用C#可以这样写:.net 定义具有相同名称和不同类型参数数的泛型类(C+;+;/CLI),.net,generics,c++-cli,managed,.net,Generics,C++ Cli,Managed,用C#可以这样写: public static class Test { } public class Test<T> { } 公共静态类测试 { } 公开课考试 { } 如何在C++/CLI中执行相同的操作 我试图定义: public ref class Test abstract sealed { }; generic<typename T> public ref class Test { }; public ref类测试摘要密封 { }; 通用的 公共参考类
public static class Test
{
}
public class Test<T>
{
}
公共静态类测试
{
}
公开课考试
{
}
如何在C++/CLI中执行相同的操作
我试图定义:
public ref class Test abstract sealed
{
};
generic<typename T>
public ref class Test
{
};
public ref类测试摘要密封
{
};
通用的
公共参考类测试
{
};
但我得到了一个C2011错误:“类”类型重新定义
我想创建一个静态类,它定义了创建泛型类实例的方便方法,就像System.Tuple一样
<> >非常感谢! < P> C++中没有静态类概念,甚至在C++/CLI.This中也没有讨论过。 然而,若您想像在静态类中一样模拟事物,一个解决方法是放置一些静态函数,可以调用这些函数来初始化静态成员,而无需创建实例
class Test
{
public:
static int InitializeGenerics(...);
}
这可以很容易地称为
Test::InitializeGenerics()
为了清楚起见,您需要执行以下操作:
generic<typename T>
public ref class Test {};
generic<typename T, typename U>
public ref class Test {};
通用
公共ref类测试{};
通用的
公共ref类测试{};
<> P>这是一个缺陷,因为CLR允许这样做。但是它是从C++继承的。C++ C++语言使用了C++编译器的很多管道,在这个过程中继承了它的命名规则。你可以把它发布到连接。MySoFt.com,但是它会像“设计”一样快速关闭。
唯一可行的方法是将这些泛型类型移动到C++/CLI项目中引用的C#类库中。或者通过解决诸如重命名其余类之类的折衷方案,像Test2这样的方法是可取的。这确实反映了这些类完全不相关的现实。嗨,谢谢你的回答。Defining静态类不是我的问题。我想定义两个同名的ref类,这样一个类有一个泛型类型参数,另一个没有。这是不可能的,原因是在编译期间它会产生冲突,但是Hans解决方案更详细地说明了这一点:(