- 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; не работает.
Не в первый раз сталкиваюсь с этой проблемой из-за примитивной системы импорта.
Treulos 20.07.2013 23:22 # −1
an0nym 21.07.2013 00:32 # −1
Treulos 21.07.2013 00:55 # −1
Но почти от всех форвард деклараций можно уйти, разделяя класс на реализацию и описание (цпп и хпп).
//тут было много текста.
defecate-plusplus 21.07.2013 00:59 # +1
Treulos 21.07.2013 01:02 # −2
Но вообще-то, если приходится такое городить - то это явно проблемы архитектуры приложения.
roman-kashitsyn 21.07.2013 23:17 # +5
Трудно представить, сколько времени компилился бы clang, если бы там все форварды заменили на инклюды...
defecate-plusplus 20.07.2013 23:44 # 0
мерзость в голых укаателях
мерзость в том, что указатели друг на друга собираются хранить классы из явно несвязанных неймспейсов
мерзость в больших буквах в названиях классов
an0nym 21.07.2013 00:38 # −2
Стиль именования из Qt почерпнул, так ентерпрайзнее выглядит.
defecate-plusplus 21.07.2013 00:47 # 0
кроме forward declaration есть еще минимум 3 способа увязать классы
Xom94ok 21.07.2013 10:04 # +5
Словил SIGFPE и проигнорировал. У Qt логичный и обоснованный стиль оформления кода, в его сорцах чуточку приятнее копаться, чем в каком-нибудь boost.
>>еще минимум 3 способа
А какой же третий?
Treulos 21.07.2013 18:04 # −3
defecate-plusplus 21.07.2013 18:15 # +2
да?
Xom94ok 21.07.2013 19:04 # 0
>>ебланскими Q-префиксами
OK, дальше явно спорить бессмысленно.
defecate-plusplus 21.07.2013 20:18 # 0
ЕМНИП у moc (кстати, очередное гениальное творение - вставить лишнюю сущность в тулчейн, ибо ниасилили - такой типичный ентерпрайз бгг) были непреодолимые проблемы, если пользовательский класс с Q_OBJECT находился в "неправильном" неймспейсе
defecate-plusplus 21.07.2013 18:17 # +4
1. интерфейс
2. шаблон
3. коллбек
ScorpioT1000 24.07.2013 12:59 # −1
roman-kashitsyn 21.07.2013 11:55 # +5
На кой ляд? Зачем привязывать модель к представлению? Зачем интерпретатору знать о консоли? А если я к вебу захочу его прикрутить?
Stertor 25.07.2013 08:33 # 0