- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
/// ...хде-то в начале огромной-преогромной функции...
#define ADD_GRAPH(gid,gmod) m_Registry[TGraphId(gid,gmod)] = new
/// ...хде-то по её середине...
#define ADD_MAP_WEAPON_OVERLAY(name_base,file_name)\
for (i=0; i<8; i++)\
{\
ADD_GRAPH(name_base _T("S"),i) (CLoadImage (\
file_name,\
TImageFX ()\
.SetColorReplacementFX (g_WeaponRecolor[i],2,0)\
));\
ADD_GRAPH(name_base _T("Q"),i) (CLoadImage (\
file_name,\
TImageFX ()\
.SetColorReplacementFX (g_WeaponRecolor[i],2,1)\
));\
}
#define ADD_MAP_WEAPON_OUTLINE(name_base,file_name)\
ADD_GRAPH(name_base _T("C"),0) (CLoadImage (\
file_name,\
TImageFX ()\
.SetColorReplacementFX (g_WeaponRecolor[0],2,2)\
));
ADD_MAP_WEAPON_OVERLAY (_T("CellSword"),_T("cell_weap_sword.png"));
ADD_MAP_WEAPON_OVERLAY (_T("CellAxe"),_T("cell_weap_axe.png"));
ADD_MAP_WEAPON_OVERLAY (_T("CellEshock"),_T("cell_weap_eshock.png"));
ADD_MAP_WEAPON_OVERLAY (_T("CellLance"),_T("cell_weap_lance.png"));
//... тут очень много в таком же духе ...
ADD_MAP_WEAPON_OUTLINE (_T("CellXbow"),_T("cell_weap_xbow.png"));
ADD_MAP_WEAPON_OUTLINE (_T("CellRifle"),_T("cell_weap_rifle.png"));
ADD_MAP_WEAPON_OUTLINE (_T("CellPistol"),_T("cell_weap_pistol.png"));
>Как бы оно выглядело без макросов, предоставляю гадать желающим.
Эстеты, разумеется, могут возопить: "Пошто было не вынести всё это в функцию?!" Пото, что функцию (а она потребовалась бы методом) пришлось бы описывать в хедере вместе с классом + имплементировать где-то снаружи текущей функции - весёлое занятие, нечего сказать. Это при том, что данный конкретный кусок кода на момент написания сильномутабелен в плане кол-ва требующихся параметров, и в перспективе мог вообще исчезнуть/слиться с другим. И таких кусков там ~100500. Возможностей, с которыми использование функций для подобного действа не является злобным буратинством, в моём местном С++ пока не наличенствует. А так все релевантные к специфике данного куска пиписьки сконцентрированы в одном месте, умещаются на 1 экран, и я спокоен за возвращение к нему через много времени.
Kirinyale 21.08.2011 19:48 # +2
Dummy00001 21.08.2011 21:14 # +2
CPPGovno 30.09.2011 00:16 # 0
Ничего писать не нужно. Для кодогенерации есть готовые специальные инструменты.
CPPGovno 30.09.2011 00:21 # 0
Открываю переводное издание "современного проектирования на С++" на странице 86 и читаю:
Это означает, что мы вообще больше не будем писать программы, а заставим компилятор делать это за нас.
Dummy00001 30.09.2011 00:25 # 0
Avoid hand-hacking; write programs to write programs when you can.
CPPGovno 30.09.2011 00:36 # 0
Dummy00001 30.09.2011 00:44 # −1
но по моему тебе еще раз нужно вчитаться внимательно в ГК приведенный выше.
написать базовый скрипт для генереции того что приведино в ГК, и его интерграция в билд систему, по крайней мере на юнихе, занимает столько же времени сколько я только что потратил на ответы тебе.
CPPGovno 30.09.2011 00:46 # 0
Dummy00001 30.09.2011 00:51 # 0
gegMOPO4 21.08.2011 22:28 # +5