Здесь есть два разных аспекта:
- проблема несовместимости
- проблема производительности
Если это вопрос производительности, то выбор должен быть за ними, они могут захотеть отладить.
Если это вопрос несовместимости, одной простой вещью является изменение пространства имен для отладочной версии, чтобы символы по-разному искажались.
#ifdef NDEBUG
namespace project {
#else
namespace project { namespace debug {
#endif
// content
#ifdef NDEBUG
}
#else
}
using namespace debug;
}
#endif
Вложив в пространство имен debug
, вы изменяете искажение символов (хотя при компиляции это ничего не меняет). Это на самом деле предотвращает связывание библиотеки, скомпилированной с отладочной версией, с версией выпуска (и, таким образом, устраняет несовместимость на ранних этапах, а не таинственно сбоит).
Тем не менее, я призываю вас зарезервировать это для очень определенного набора классов (это тяжело).
Обычно должна быть возможность предоставлять совместимые интерфейсы в режимах отладки и выпуска, чтобы клиенты могли выполнять горячую замену во время загрузки.