Среда Ардуино использует версию AVR набора инструментальных средств GCC. Код компилируется как C++, таким образом, можно использовать классы. Виртуальные функции возможны; vtables будут сохранены в разделе .data и иметь корректные адреса. На самом деле базовый класс Печати использует виртуальные функции для адаптации различных методов "печати" к различным выходным типам.
Исключения не поддерживаются из-за причин пространства кода. Среда Ардуино передает "-fno-исключения" командной строке компилятора. Посмотрите источник для проверки этого.
Шаблоны поддерживаются. Например, этот потоковый метод оператора вставки без стоимости хорошо работает с помощью простого шаблона и встроенного оператора.
Удобство использования функции не ограничены платформой, а скорее компилятором, который Вы используете.
я проверил бы Вашу документацию компилятора, какие функции языка поддерживаются.
Comeau, вычисляя имеет C++ к компилятору C, который поддерживает все функции C++. Не только виртуальные функции, или исключения, но также и экспорт. Вы должны были бы назвать Comeau, чтобы заставить это предназначаться для языка Ардуино, но должны быть не слишком твердыми.
Я использовал g ++ с этот Make-файл и запустился с этот код . C++ тратит впустую некоторое пространство. Но protothreads слишком прохладны для не использования.
В документации говорится:
язык Ардуино основан на C/C++ и поддерживает весь стандарт C конструкции и некоторые функции C++.
Это ничего не говорит о виртуальных функциях, что я могу найти.
я попробовал простую программу, и она компилирует прекрасный. Я не протестировал его на аппаратных средствах Ардуино все же.
РЕДАКТИРОВАНИЕ: Я также не протестировал исключения.
The Arduino software uses avr-gcc to compile sketches. The following limitations were sourced from the avrlibc FAQ (Can I use C++ on the AVR?):
Supported
Not supported
new
and delete
(attempting to use them will cause the linker to complain about undefined external references). This means that objects can only be created on the stack. If dynamic memory allocation is required it must be implemented using malloc()
and free()
of C
types-fno-exceptions
in the compiler options. This is done automatically by the Arduino IDE when it launches avr-gcc
Other issues
extern "C" { . . . }