Я хотел бы использовать абстрактные базовые классы для своих классов. Эти абстрактные классы служили бы целям интерфейсов. Они присутствуют только в качестве самопроверки, чтобы убедиться, что все необходимые члены реализованы. Это ускоряет разработку. Поскольку сообщения об ошибках намного чище, чем onces, которые будут создаваться из шаблонов.Отключить наследование от базового класса в C++ в режиме освобождения
Поскольку я собираюсь использовать классы реализации в шаблонах, базовый класс сам по себе не понадобится в сборке релизов. Фактически, это только вводит накладные расходы, хотя это и мало.
Есть ли какая-то препроцессорная магия, которая позволяет мне наследовать эти классы абстрактных интерфейсов только в том случае, если определены символы отладки?
Использование макроса NDEBUG должно выполнять трюк: 'class Derived \ n #ifndef NDEBUG \ n: public AbstractBase \ n # endif \ n {// body};' – NetVipeC
Препроцессор - это инструмент для замены текста, вы можете сделать это напишите любую программу. Тем не менее, я бы не сказал, что это хорошая идея использовать его для этого. Кроме того, перед тем, как вы начнете такие хаки, проведите свой код, чтобы доказать, что это действительно те ABC, которые вызывают замедление. Кроме того, просто чтобы убедиться, что тип имеет функцию, используйте статические утверждения или что-то подобное, для этого вам не нужны ABC. –
@Ulrich Eckhardt: статические звуки утверждают, что это действительно лучший способ сделать это :) спасибо! –