Перемещение сильно шаблонизированного кода C ++ в Java - PullRequest
6 голосов
/ 28 мая 2009

У меня есть приложение, написанное на C ++ (активно использует шаблоны), которое мне нужно перенести на платформу Java ME.

У меня два вопроса:

  1. Есть ли хорошие инструменты для преобразования кода C ++ в Java - сделайте некоторые базовые вещи, чтобы у меня была платформа для начала. Я нашел это - http://tangiblesoftwaresolutions.com/Product_Details/CPlusPlus_to_Java_Converter_Details.html. Это, по крайней мере, устранит необходимость в простых, но трудоемких вещах, таких как перемещение классов в разные файлы, пространства имен в пакеты и т. Д. Кто-нибудь пробовал это? Или знает что-нибудь получше?

  2. Большая проблема в том, как обращаться с шаблонами - их очень интенсивно использует код. Любые предложения о том, как это сделать? Существуют ли какие-либо инструменты для расширения шаблонов, например, чтобы у меня была элементарная основа, и тогда я мог бы работать над написанием модулей на Java?

Буду признателен за любую помощь.

Ответы [ 5 ]

7 голосов
/ 28 мая 2009

Для всего маркетинга Sun Java - не просто лучший C ++, и фактически не поддерживает многие идиомы и парадигмы, поддерживаемые C ++. Это затрудняет автоматический перевод. Как вы должны автоматически превратить иерархию множественного наследования в иерархию единого наследования Java? (Обратите внимание, я не говорю, что иерархия с множественным наследованием - хорошая вещь, только то, что она явно разрешена в C ++). Более фундаментально, как бы вы представили функцию указателя на член в Java? Или обработать различия между разрешением перегрузки Java и C ++?

Java добавила дженерики несколько лет назад, но намеренно сделала их менее мощными, чем шаблоны C ++. Независимо от того, была ли это хорошая идея, она ограничивает возможности автоматического перевода с использованием сильно шаблонизированного кода.

Помимо использования какого-либо исследовательского компилятора, который может превратить C ++ в байт-код Java, я боюсь, что вы можете застрять при переводе вручную.

1 голос
/ 28 мая 2009

Можете ли вы использовать JNI и вызывать старый код C ++ из нового кода Java?

0 голосов
/ 01 июня 2009

Я не думаю, что это будет возможно, особенно если ваш исходный код сильно шаблонизирован - J2ME не поддерживает дженерики, AFAIK.

К сожалению, кажется, что для этого потребуется много ручной работы, чтобы просмотреть исходный код и переписать его (я предполагаю, что ваша целевая платформа не поддерживает JNI)

0 голосов
/ 28 мая 2009

Я думаю, что для вашего случая был бы очень простой и, возможно, полезный инструмент. Впрочем, это может быть веселая работа на выходных! Мой друг однажды сделал порт из C ++ в Java, и он просто сделал список замен регулярных выражений. Мол, у него все вхождения -> заменены точкой. И так далее. Однако это было несколько лет назад, поэтому мне не хочется спрашивать его.

Итак, вы могли бы сделать то же самое, собрать несколько простых замен и, возможно, опубликовать их где-нибудь на github?

0 голосов
/ 28 мая 2009

Generics - это функция Java, которая соответствует шаблонам C ++, и они не поддерживаются в J2ME. Вы можете использовать их с помощью framework , который, вероятно, использует предварительную обработку для достижения цели. (На самом деле Generics в Java - это функция компилятора - JVM ничего о них не знает.)

В любом случае, будет трудно, если не невозможно, автоматически портировать даже небольшую часть кода с C ++ на Java Standard Edition - с J2ME дела обстоят намного хуже. Существует много важных различий между шаблонами Java Generics и C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...