У меня есть класс A
и два класса, B
и C
, наследующий от A
.Обходное решение для ifdef/ifndef
Помимо методов из A
, каждый класса может предложить разные вещи, и, таким образом, я хотел бы, чтобы поместить их в двух разных файлах - b.hpp
и c.hpp
, так как они шаблоны с встроенными функциями.
У меня также есть класс User
, используя как классы B
, так и C
. В user.cpp
, я должен что-то близкое к:
# include "b.hpp"
# include "c.hpp"
class User{
...;
};
Какой бы поднять ошибку переопределение компилятора, за то, что я держу оба класса B
и C
в bc.hpp
.
Озабоченность здесь довольно эстетичный, кроме ошибки программирования: Я просто не нахожу очень элегантный использованием ifdef/ifndef
директив в небольших приложений - они всегда смотрят на меня, как решение интегрированной среды для людей, управляющих слишком много модулей, и для тех, кто даже не знает директив.
Есть ли (даже нестандартным, но, по крайней мере, в здравом уме) обходной путь для этого, или я должен придерживаться либо имея два разных классов в одном файле и использовать ifdef/ifndef
?
Я согласен, что они используются очень профессиональными людьми. Я видел код ядра, говорящий 'ifndef', как только я должен был его открыть ^^ Это просто я привык избегать использования его для слишком маленьких приложений, как тот, который я разрабатываю. Угадайте, что мне все равно придется принимать факты (: Спасибо всем за ответы! – Rubens
@Rubens Для * действительно * маленькое приложение, нет необходимости использовать заголовок вообще, но на данный момент защита заголовков - это то, как C++ достигает такой модульности. – Potatoswatter
Мой способ делать вещи: держать включенные заголовки как можно ниже, чтобы улучшить время компиляции, но всегда ставьте охранников, чтобы не заботиться о двойных вложенных включениях. – Mic