在Red Hat Linux上将C#类库转换为C ++

时间:2009-09-10 18:59:29

标签: c# c++ migration

我们在VS 2008上开发了一个C#类库。我们想要与Red Hat Linux上的C ++库相同的功能。我们如何实现这一目标?

我确信我们不是第一个将C#迁移到C ++的人。是否有任何自动化工具来转换源代码?

我们了解Mono,但我们更喜欢C ++源代码。 大约15%是有用的代码,其余85%是使用NUnit的单元测试。 至少我们确实希望将所有单元测试迁移为源代码。

我们使用了Reflector,它为我们完成了几乎所有的工作。唯一搞砸的是建设者。

考虑以下C#代码:

public MyClass() : this(1,2,3){}

应该转换为

public MyClass() : {this(1,2,3);}

但是Reflector将其转换为

public MyClass() : {MyClass(1,2,3);}

5 个答案:

答案 0 :(得分:12)

嗯,你是否要求一个通用的c#到c ++代码转换器,它也可以切换平台?

没问题,它被称为人类,你可以从许多不同的地方雇用或签约。

您可能还想查看Mono Project,它具有功能齐全的c#编译器和各种其他平台(包括RH Linux)的.net运行时。这样您就不需要将库重新编码为c ++,但如果您使用单声道不支持的内容,则可能需要以较小的方式更改代码。

答案 1 :(得分:2)

我认为没有办法自动将C#转换为C ++,如果这就是你所要求的,那么我认为如果不手动编写它,你就不会得到你想要的C ++。也许你可以通过Mono来使用C#本身......?

答案 2 :(得分:2)

首先转换为C ++ / CLI(C ++的.NET风格),您可以先行一步。 Red Gate的.NET Reflector支持.NET语言之间的转换(您需要一个插件来反编译为C ++ / CLI),还有其他工具。

答案 3 :(得分:1)

不幸的是,我不知道有任何这样的工具。但是,从C#到C ++的转换应该比C ++到C#更容易。 C#支持的功能,但C ++不支持(比如反射,在某些情况下定义的行为 - 比如评估顺序)比C ++具有的功能小得多且更容易解决,但C#没有({{3}你有模板函数,能够推导出类型参数,传递编译时常量作为模板参数,部分模板特化,完整模板特化,CRTP,替换失败不是错误等。)。

答案 4 :(得分:-1)

在RHEL中,您是否更喜欢C ++?如果不是Mono是更好的解决方案。