На всякий случай, используемая терминология:
PascalCase
cammelCase
snake_case
В свете переписывания библиотечного кода на кроссплатформу, принято решения использовать snake_case, как у стандартной библиотеки С++. С этим проблем нет. На 99,9% код использует шаблоны и статический полиморфизм. От сюда duck typing и никаких приседаний с именованием не требуется. Но в некоторых местах всё же необходима динамический полиморфизм и там присутствуют интерфейсы типа IBase и т.д.
Хотел коллег спросить, кто как именует чистые интерфейсные классы, в случае если везде используется snake_case ?
Какие вижу варианты:
// именование интерфейсов
struct ibase; // [1]
struct i_base; // [2]
// именование файлов
ibase.h // [1]
i_base.h // [2]
Первый случай — не очевидно, что это файл интерфейса или класс интерфейса.
Второй случай — не привычно.
Еще есть какие-нибудь варианты?