- 1
#define private public
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+890.7
#define private public
guest 16.12.2008 20:50 # +5
Это можно поставить в один ряд с #define TRUE FASLE
guest 18.12.2008 15:24 # +9.2
Это стандартный прием для того, чтобы получить доступ к приватным членам класса без наследования. Часто помогает бороться с заприваченным говнокодом.
guest 05.04.2011 15:23 # +6
>Это стандартный прием для того, чтобы получить доступ к приватным членам класса без наследования.
Это и есть говнокод, дубина
guest 18.12.2008 16:11 # 0
а рефлексии какой-нибудь в C++ нет?
Анонимус 02.03.2011 01:32 # +2
orsk864kirill 16.03.2012 13:41 # +1
wecanstoptrain 15.11.2013 20:35 # 0
guest 15.11.2013 21:40 # +2
а не в рантайме работающий
и скажи, сраный дикер, зачем ты вырыл мой коммент времен Шумерской Республики?
wecanstoptrain 16.11.2013 09:45 # +1
в рантайме работает непосредственно без компиляции.
guest 18.12.2008 20:37 # +4.2
[quote=Говногость] #2 Говногость (6 часов назад)
Это НЕ говнокод.
Это стандартный прием для того, чтобы получить доступ к приватным членам класса без наследования. Часто помогает бороться с заприваченным говнокодом. [/quote]
"стандартный прием" на самом деле противоречит стандарту, т.к. ломает ODR.
это именно говнокод.
w-495 17.10.2009 00:39 # 0
guest 18.12.2008 23:28 # +1
[quote=страйко]а рефлексии какой-нибудь в C++ нет?[/quote]
Никакой рефлексии в С++ нет.
Тема данного говнокода раскрыта у Herb Sutter [url]http://www.gotw.ca/gotw/076.htm[/url] - здесь или в его книге Exceptional C++ Style.
guest 27.12.2008 07:35 # 0
Каким образом оно ломает ODR?
guest 02.01.2009 22:25 # 0
[quote=_zerg]
Каким образом оно ломает ODR? [/quote]
Достаточно включения в единицу трансляции, где директивы #define private public нет. В случае "чужого кода" такая единица уже имеется.
Хоть последствия UB не обсуждаются, тут можно попробовать представить себе, что будет, если компилятор групирует члены-данные по области видимости, или если порядок баз зависит от типа наследования.
guest 20.01.2009 11:50 # 0
Буду краток, писец ))
guest 09.02.2009 13:35 # +1
Попахивает диверсией. О_о
guest 12.03.2009 16:15 # +11
вот диверсия:
#define CRASH_SOMETIMES 10/(rand()%10)
guest 30.03.2009 11:54 # +5
это не говнокод, а костыль для тупых либ.
Человек знал, что писал (хотя и выглядит криво, но иногда иначе никак, если надо запатчить приват).
guest 12.06.2009 16:56 # +1
Этот код действительно используется как минимум в двух случаях:
1) Чужие либы с недостаточным интерфейсом.
2) При написании unit-тестов.
Лучше всего использовать так:
guest 28.06.2009 01:20 # 0
xaionaro 26.11.2010 22:45 # 0
guest 30.03.2012 20:22 # 0
MuToGeN 05.02.2010 01:13 # +12
Xander_Bass 16.03.2012 15:42 # −3
// Только для зарегистрированных
XDDD
guest 30.03.2012 19:31 # 0
guest 30.03.2012 20:10 # +2
anonimb84a2f6fd141 25.11.2012 00:13 # −2
guest 07.10.2016 23:31 # 0
Надо:
#define private public
// включить чужой кривой интерфейс и что то с ним сделать
#undef private
Из другой оперы, но похожее - имеем:
#pragma pack(push,1)
struct A{...}
не забываем
#pragma pack(pop)
после объявления необходимо-упакованных структур
guest 07.10.2016 23:33 # 0
barop 08.10.2016 00:13 # 0
guest 07.10.2016 23:32 # 0
Gena 20.06.2020 22:23 # 0