- 1
- 2
- 3
- 4
- 5
- 6
namespace engine { namespace ui { class Console; } }
class Dummy
{
engine::ui::Console * _ptr;
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+7
namespace engine { namespace ui { class Console; } }
class Dummy
{
engine::ui::Console * _ptr;
};
Решение проблемы с перекрёстными #include, когда классы должны хранить указатели друг на друга. Простое объявление class engine::ui::Console; не работает.
Не в первый раз сталкиваюсь с этой проблемой из-за примитивной системы импорта.
Но почти от всех форвард деклараций можно уйти, разделяя класс на реализацию и описание (цпп и хпп).
//тут было много текста.
Но вообще-то, если приходится такое городить - то это явно проблемы архитектуры приложения.
Трудно представить, сколько времени компилился бы clang, если бы там все форварды заменили на инклюды...
мерзость в голых укаателях
мерзость в том, что указатели друг на друга собираются хранить классы из явно несвязанных неймспейсов
мерзость в больших буквах в названиях классов
Стиль именования из Qt почерпнул, так ентерпрайзнее выглядит.
кроме forward declaration есть еще минимум 3 способа увязать классы
Словил SIGFPE и проигнорировал. У Qt логичный и обоснованный стиль оформления кода, в его сорцах чуточку приятнее копаться, чем в каком-нибудь boost.
>>еще минимум 3 способа
А какой же третий?
да?
>>ебланскими Q-префиксами
OK, дальше явно спорить бессмысленно.
ЕМНИП у moc (кстати, очередное гениальное творение - вставить лишнюю сущность в тулчейн, ибо ниасилили - такой типичный ентерпрайз бгг) были непреодолимые проблемы, если пользовательский класс с Q_OBJECT находился в "неправильном" неймспейсе
1. интерфейс
2. шаблон
3. коллбек
На кой ляд? Зачем привязывать модель к представлению? Зачем интерпретатору знать о консоли? А если я к вебу захочу его прикрутить?