Перемещение в большой степени templatized код C++ к Java

Основной первоначальной мотивацией для использования этого функционального стиля для этих случаев в C ++ было «aaagh! Iterator loops!», А C ++ 0x удаляет эту мотивацию с помощью оператора for, основанного на диапазоне. Я знаю, что часть вопроса заключалась в том, чтобы выяснить синтаксис лямбды, но я думаю, что ответ на вопрос «Как это делается в C ++ 0x?» is:

for(double &a : myv1) { a *= 3; }

Там нет реального функционального объекта, но если это поможет, вы можете притвориться, что { a *= 3; } - это очень сокращенная лямбда. Что касается удобства использования, то в любом случае это равносильно тому же, хотя проект стандарта определяет диапазон на основе эквивалентного цикла for.

6
задан unwind 28 May 2009 в 07:55
поделиться

5 ответов

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

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

7
ответ дан 16 December 2019 в 21:45
поделиться

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

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

0
ответ дан 16 December 2019 в 21:45
поделиться

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

1
ответ дан 16 December 2019 в 21:45
поделиться

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

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

0
ответ дан 16 December 2019 в 21:45
поделиться

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

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

0
ответ дан 16 December 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: