В зависимости от того, что вы планируете использовать для библиотеки, я думаю, что я бы предложил сначала реализовать ее как C - но дизайн должен учитывать, как она будет включена в дизайн C ++. Затем реализуйте классы C ++ поверх и / или вдоль стороны реализации C (нет причины, по которой этот шаг нельзя сделать одновременно с первым). Если ваш дизайн C сделан с учетом дизайна C ++, он, вероятно, будет таким же чистым, читаемым и поддерживаемым, как дизайн C ++. Это немного больше работы, но я думаю, что вы получите библиотеку, которая будет полезна в большинстве ситуаций.
Хотя вы обнаружите, что C ++ все больше и больше используется в различных встроенных проектах, все еще есть многие, которые ограничивают себя C (и я думаю, что это чаще всего так, чем нет) - независимо от того, используются ли инструменты поддержка C ++. Было бы стыдно иметь хорошую библиотеку подпрограмм, которую вы могли бы перенести в новый проект, над которым вы работаете, но не сможете их использовать, потому что C ++ не используется в этом конкретном проекте.
В общем, гораздо проще использовать хорошо спроектированную библиотеку C из C ++, чем наоборот. Я использовал этот подход с несколькими наборами кода, включая синтаксический анализ файлов Intel Hex, простой анализатор команд, управление объектами синхронизации, платформы FSM и т. Д. В какой-то момент я планирую создать простой анализатор XML.