'instanceof' является на самом деле оператором, как + или - и я полагаю, что он имеет свою собственную инструкцию по байт-коду JVM. Это должно быть много быстро.
я не должен что, если у Вас есть переключатель, где Вы тестируете, если объект является экземпляром некоторого subsclass, то Ваш дизайн, возможно, должен был бы быть переделан. Рассмотрите снижение определенного для подкласса поведения в сами подклассы.
Если вы используете LLVM , llvm-g ++
скомпилирует ваш код C ++ в битовый код LLVM, а llc
имеет бэкэнд который преобразует битовый код в C.
Вы можете написать такие команды:
llvm-g++ -emit-llvm -c foo.cpp -o foo.o
llc -march=c <foo.o >foo.c
Не могу помочь с Z8, но семейство Renesas M16C / M32C имеет GCC в наши дни - см. http://www.kpitgnutools.com/ для готовой кросс набор инструментов, размещенный в Windows. Сам еще не использовал его, но может быть лучшим вариантом, чем сторонний интерфейс C ++, тем более что ваш код уже нацелен на GCC на других платформах.
Comeau C ++ генерирует C в качестве вывода, и они, кажется, вполне счастливы перенести его для работы с различными внутренними компиляторами, хотя я не уверен в точных ценах на это.
Если вы хотите немного большего, свой собственный подход, вы можете купить лицензию на компилятор EDG C ++. Обычно он используется в качестве внешнего интерфейса (например, Comeau и Intel), но я считаю, что на момент поставки он включает в себя генератор кода, который производит C в качестве вывода. Однако ее лицензирование ориентировано больше на поставщиков компиляторов, поэтому лицензия дает вам много прав, но стоит довольно дорого.
Устарело, но, может быть, вы хотите попробовать cfront ?
Я оставлю это для информации - cfront не поддерживает исключения.
Из того, что я понял, поддержка c ++ в gcc для r8c / m16c / r32c не совсем зрелая и недостаточно хорошая для производственного кода. Но для r8c / m16c / m32c / r32c существует по крайней мере один компилятор, поддерживающий встроенный C ++, и это IAR, я думаю, Tasking также поддерживает встроенный C ++ на m16c.