[cJass] - STL
|
|
xomach | Дата: Воскресенье, 09 Февраля 2014, 08:57:26 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Еще когда год назад занимался картостроением, думал, почему не нашлись энтузиасты, которые бы написали что-то вроде STL для картоделов. Имеется ввиду не перенос сишных функций, а реализация некого набора функций и наработак, которые и так гуляют из карты в карту, но только иной раз на костылях, а то и вовсе нерабочими. Например: - стандартные контейнеры C++ (лично мне регулярно не хватает) - некоторые стандартные алгоритмы - callback система - 3Dcam - ФСгуй ...
Думаю, не составит труда найти, чем наполнить, было бы, кому наполнять Есть предложение собрать команду для реализация подобной библиотеки
П.С.: Сам я, естественно, в деле
Сообщение отредактировал xomach - Воскресенье, 09 Февраля 2014, 14:33:47 |
|
|
|
SirNikolas | Дата: Воскресенье, 09 Февраля 2014, 09:32:02 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Название темы интригует. Что конкретно хотел узнать?
|
|
|
|
xomach | Дата: Воскресенье, 09 Февраля 2014, 10:50:28 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Здарова, да что-то бес попутал предложения глупые выдвигать) Неважно
|
|
|
|
SirNikolas | Дата: Воскресенье, 09 Февраля 2014, 11:28:05 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ну почему же, макросы вполне могут исполнить роль шаблонов. Верни текст первого поста, интересно.
|
|
|
|
xomach | Дата: Воскресенье, 09 Февраля 2014, 14:20:53 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| SirNikolas, глупое не потому, что не получится, а потому что врят ли кто-то возьмется за это
|
|
|
|
SirNikolas | Дата: Воскресенье, 09 Февраля 2014, 15:02:25 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата xomach ( ) - callback система Забавно, сам недавно начинал делать нечто подобное. По моим замыслам, выглядеть должно было примерно так:[code=jass]library Poison requires SpellData { define { private SPELL = 'A000'; private DURATION(lvl) = 10.; private PERIOD = 1.; private DAMAGE(lvl) = (50. + 100. * lvl) * PERIOD; private EFFECT = ""; private ATTACH = "chest"; }
constant key KEY;
//По таймеру наносим урон. private void onTimer(SpellData d) { UnitDamageTarget(d.unit[0], d.unit[1], d.real[0], true, false, null, null, null); }
//После окончания снимаем эффект. private void onEnd(SpellData d) { DestroyEffect(d.effect[0]); d.destroy(); }
//При смерти цели прекращаем действие заклинания. private void onTargetDeath(SpellData d) { d.End(); }
//Рассчитываем значения и запускаем таймер. callback onUnitSpellEffect(SPELL) { SpellData d = SpellData.create(KEY, 2); int lvl = GetUnitAbilityLevel(GetTriggerUnit(), SPELL); //Записываем кастера и цель. d.unit[0] = GetTriggerUnit(); d.unit[1] = GetSpellTargetUnit(); //Регистрируемся на смерть цели. d.onDeath[1] = onTargetDeath; //Рассчитываем урон и (возможно) некоторые дополнительные данные. d.real[0] = DAMAGE(lvl); d.effect[0] = AddSpecialEffectTarget(EFFECT, d.unit[1], ATTACH); //Запускаем периодик. d.Start(DURATION(lvl), PERIOD, onTimer, onEnd); } }[/code]
|
|
|
|
xomach | Дата: Воскресенье, 09 Февраля 2014, 15:16:29 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Цитата SirNikolas ( ) макросы вполне могут исполнить роль шаблонов а указатели кстати ничем уже не заменишь
ну если говорить о define'ах как замене template, то все это чудо должно быть не константным, а что-то типо: Код define set_ini(type) = { struct set_##type () { .... public void insert (type x) { .... } .... } }
... set_ini (int) ... set_int q; ...
Сообщение отредактировал xomach - Воскресенье, 09 Февраля 2014, 15:17:18 |
|
|
|
SirNikolas | Дата: Воскресенье, 09 Февраля 2014, 15:55:51 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата xomach ( ) set_ini (int) ... set_int q; А вот и нет. Нужно использовать нативные JASS2 типы, иначе Adic не сможет восстановить тип q. А вообще да, именно это я и имел в виду. Правда, мне для таких целей больше по душе текстмакросы, но это дело вкуса.
|
|
|
|
xomach | Дата: Воскресенье, 09 Февраля 2014, 16:11:14 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| Цитата SirNikolas ( ) А вот и нет. Нужно использовать нативные JASS2 типы, иначе Adic не сможет восстановить тип q не совсем понимаю, почему?
ну, по крайней мере, это компилится: Код define int = integer define void = nothing
define set_ini(type) = { struct set_##type { type x = 0 } }
set_ini(int)
void func () { set_integer q; q.x = 5 int w = q.x }
Добавлено (09 Февраля 2014, 16:11:14) --------------------------------------------- а, нет, set_int q не компилится, и я даже понял, почему)
|
|
|
|