- 1
- 2
- 3
#define REGISTER_PACKET(cls, type)\
__declspec(selectany) PacketType cls::s_type = CPacketFactory::RegisterPacket(type, cls::CreateNew); \
__pragma(comment(linker, "/include:?s_type@##cls##@@2W4PacketType@@C"))
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+13.1
#define REGISTER_PACKET(cls, type)\
__declspec(selectany) PacketType cls::s_type = CPacketFactory::RegisterPacket(type, cls::CreateNew); \
__pragma(comment(linker, "/include:?s_type@##cls##@@2W4PacketType@@C"))
Очень правильный код... Делать можно только так.
И что это значит?
Это значит, что никакого стандарта на самом деле нету. Name mangling везде разный. Даже если этот Говнокод #1616 в каком-то конкретном случае и решит кукую-то проблему, на каком-то конкретном компиляторе, какой-то конкретной версии... итд итд
Потому это и написал. Подругому там врятли что-то можно сделать... Если конечно, не искать более лёгких путей, но в обход стандарта, то всё скорее всего было-бы переносимо.
Pragma на всех компиляторах разные.
Это значит, что C++ не нужен.
А тут еще такие кренделя с линковщиком.