将C++程序转换为C#

5

我正在进行一个项目,将C++代码手动转换为C#。我对C#有一定的了解,但之前从未使用过C++。

我需要知道如何处理头文件,因为C#没有类似的东西。举个例子,如果有buffer.h和buffer.cpp文件,我是不是只需将它们转换并将它们包含在同一个buffer.cs文件中?

C++头文件和Ada规范文件是否有任何关联?


1
不,你不能这样做。所有的东西都要放在*.cs文件中。你可能已经知道了 :). 在大多数情况下,在c++中声明和定义是分开的好习惯,但是在.net中,头文件的目的被元数据的概念所取代。简短的解释:是的,你需要把所有的东西都放在同一个编译单元.cs文件中。 - ervinbosenbacher
以下链接可能会有所帮助:http://msdn.microsoft.com/zh-cn/magazine/cc301520.aspx - sarwar026
头文件只是在C++翻译单元中文本地包含在#include语句所在的位置。因此,在实际效果上,即使在C++中,一旦进行了包含,翻译单元也只有一个源文件。 - David Heffernan
概率是非常复杂的,因为C++有指针和.h结构文件,这两种语言的结构非常不同。 - pedrofernandes
根据您尝试翻译的C++版本的现代程度,可能无法进行“字面”翻译。当然,您应该能够获得良好的功能等效性,但这需要对两种语言有很好的理解。 - luke
2个回答

6
包含 ".h文件" 和源代码 ".cpp文件" 之间的区别只是一种惯例。 惯例是声明(函数,类等)在 .h 文件中,该文件被引用到实现(定义)或 .cpp 文件中。 对于大多数情况,将 X.h 和 X.cpp 折叠成单个 X.cs 文件即可。
话虽如此,您仍然需要查看每个文件中发生的情况。 对 C++ 的基本了解在这里非常重要,我强烈建议您在进行翻译之前先获得这种了解。

1

你可以将C++头文件看作包含两种主要类型的内容:类定义,它定义了其成员数据和“接口”(不要与C#接口类型混淆)以及“其他内容”。类定义部分包含方法原型和类成员变量。

关于原型的好消息是,在C#中你根本不需要它们。你的类的客户端通过命名空间的程序集从实现本身获得原型信息。数据成员包含在你的C#类实现中,通常作为私有成员通过C#属性公开。

上面提到的“其他内容”可能包括#define,你通常希望将其转换为C#中的const定义。其他诸如枚举之类的东西在C#中都有相应的等价物,当然你需要将它们移动到你的类的.cs文件中。


在 C 和 C++ 中,#define 宏可以远远超出常量变量的声明。 - luke
@luke - 很好的观点。#define宏必须转换为方法。 - Buggieboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接