将严格模板化的C ++代码移植到Java

时间:2009-05-28 07:54:00

标签: java c++ templates

我有一个用C ++编写的应用程序(大量使用模板),我需要把它带到Java ME平台。

我有两个问题:

  1. 有没有什么好的工具可以将C ++代码转换为Java - 做一些基本的东西,所以我有一个平台可以开始。我找到了这个 - http://tangiblesoftwaresolutions.com/Product_Details/CPlusPlus_to_Java_Converter_Details.html。它至少可以消除对简单但耗时的事情的需求,例如将类移动到不同的文件,命名空间到包等等。有人试过吗?或者知道更好的?

  2. 更大的问题是如何处理模板 - 代码大量使用它们。关于如何解决这个问题的任何建议?有没有工具来扩展模板,所以我有一个基本的基础,然后我可以用Java编写模块?

  3. 任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:7)

对于Sun的所有营销来说,Java不仅仅是一个更好的C ++,实际上并不支持C ++支持的许多习语和范例。这使得自动翻译变得困难。您应该如何自动将多继承层次结构转换为Java的单继承层次结构? (注意,我并不是说多继承层次结构是好事,只是在C ++中明确允许它)。更基本的是,您如何在Java中表示指向成员的函数?或者处理Java和C ++重载决策之间的差异?

Java几年前添加了泛型,但故意使它们的功能不如C ++模板。无论这是否是一个好主意,它都限制了自动翻译可以使用严格模板化的代码。

除了使用一些可以将C ++转换成Java字节码的研究编译器之外,我担心你可能会被困在手工翻译。

答案 1 :(得分:1)

您可以使用JNI并从新的Java代码中调用旧的C ++代码吗?

答案 2 :(得分:0)

泛型是与C ++模板对应的Java功能,J2ME不支持它们。您可以借助framework来使用它们,这可能会使用预处理来完成这一操作。 (实际上,Java中的泛型是一种编译器功能--JVM对它们一无所知。)

无论如何,即使不是不可能自动将C ++代码的一小部分自动移植到Java标准版中也是如此 - 使用J2ME会更糟糕。 Java Generics和C ++模板之间存在许多重要的区别。

答案 3 :(得分:0)

我认为对于你的情况,一个非常简单的工具是可能的,也许是值得的。不过,可能是一个有趣的周末工作!我的一个朋友曾经做过一个从C ++到Java的端口,他刚刚制作了一个正则表达式替换列表。就像,他曾经出现过 - >用点代替。等等。这是几年前的事了,所以我真的不想问他。

所以,你可以这样做,收集一些简单的替换,并可能在github上的某个地方发布它们?

答案 4 :(得分:0)

我认为这不可能,尤其是如果您的原始代码严重模板化 - J2ME不支持泛型,AFAIK。

不幸的是,这似乎需要大量的手工工作来完成原始代码并重写它(我假设您的目标平台不支持JNI)