Я согласен с Kerrek SB.
Я сделал это один раз. Я создавал отличную, широко используемую библиотеку сжатия, которую нужно было создавать отдельно для 8-битных изображений и для 12-битных изображений. Самым чистым способом, который я мог придумать, чтобы вписать это в систему сборки, было (немного упрощение) иметь два основных файла .cpp, один из которых устанавливает #defines для 8-разрядной сборки, а другой - для 12-разрядной сборки. Основные .cpp файлы затем #include исходные файлы библиотеки сжатия.
Можно не следовать общему правилу, если вы достаточно хорошо понимаете правило, чтобы знать его причины и причины, по которым оно может не применяться в вашем случае. (Но эти случаи должны быть редкими.)