- 1
typedef boost::shared_ptr<LPDIRECT3D9> Direct3dShared;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+10
typedef boost::shared_ptr<LPDIRECT3D9> Direct3dShared;
Те кто знают, что такое в гейдеве LPDIRECT3D9 и IDirect3D9 - поймут.
Думаю сегодня даже не нужно писать с какого это сайта.
LispGovno 22.01.2014 19:33 # 0
bormand 22.01.2014 19:36 # +5
LispGovno 22.01.2014 19:39 # +2
LPDIRECT3D9 - соответственно глупый указатель на интерфейс.
bormand 22.01.2014 19:42 # +2
UPD: А при обращении к методам интерфейса он пишет что-то типа (*d3d)->someFunction()? :)
LispGovno 22.01.2014 19:50 # +2
bormand 22.01.2014 20:15 # +2
boost::intrusive_ptr?
LispGovno 22.01.2014 20:20 # +2
bormand 22.01.2014 20:30 # +2
А пару функций же можно написать всего один раз, или мне пора спать?
LispGovno 22.01.2014 20:35 # +2
bormand 22.01.2014 20:50 # +2
Да, он всю работу сваливает на эти джве функции.
Траблы пока такие вижу:
- COM объекты рождаются со 1 на счетчике, поэтому надо не забывать передавать false в конструктор intrusive_ptr;
- С QueryInterface непонятки: в своем то классе можно запилить его как оператор приведения типа, а тут - куй, придется делать внешний хелпер.
bormand 22.01.2014 21:00 # +2
Но для этого нужен способ для выяснения IID'а по интерфейсу. Изкоробки его вроде нет?
Xom94ok 22.01.2014 21:08 # +2
Ну, буст же кроссплатформенен, в отличие от СОМ, я б предположил, что нет там такого. Зато есть замечательный Microsoft::WRL::ComPtr в составе vs2012.
Но ведь это же геймдев, не написать свой dx_ptr - кощунство, сам таких три версии писал :)
defecate-plusplus 22.01.2014 19:37 # +2
и делать шаредптр указателя это неплохо, неплохо
ps. а, борманд уже настрочил)