Добавлен Пушистый
Всех приветствую. При разработке системы возник вопрос, связанный с cJass. Возможно ли как-то отловить функцию, но только для определенной переменной с ранее определенным названием.
Например, мне нужно, чтобы для SYSTEM_HASHTABLE = Hashtable_7 при написании кода FlushChildHashtable(SYSTEM_HASHTABLE,какая-то целочисленная) данная функция заменялась на FlushChildHashtable_HSD ввиду того, что первый аргумент именно SYSTEM_HASHTABLE, а вызов FlushChildHashtable(otherHashtable,какое-то число) игнорировался и оставался как есть. Как такое возможно реализовать через перехват функций (hook или дефайн, чтобы срабатывало избирательно при наличии четко определенного аргумента)?
Например, мне нужно, чтобы для SYSTEM_HASHTABLE = Hashtable_7 при написании кода FlushChildHashtable(SYSTEM_HASHTABLE,какая-то целочисленная) данная функция заменялась на FlushChildHashtable_HSD ввиду того, что первый аргумент именно SYSTEM_HASHTABLE, а вызов FlushChildHashtable(otherHashtable,какое-то число) игнорировался и оставался как есть. Как такое возможно реализовать через перехват функций (hook или дефайн, чтобы срабатывало избирательно при наличии четко определенного аргумента)?
Принятый ответ
define <FlushChildHashtable(SYSTEM_HASHTABLE,> = FlushChildHashtable_HSD(
функция FlushChildHashtable_HSD должна принимать лишь 1 параметр (инт)
либо можно так
либо можно так
define FlushChildHashtable(a, b) = {
if(`a` == "SYSTEM_HASHTABLE"){
FlushChildHashtable_HSD(b)
}else{
FlushChild##Hashtable(a, b)
}
}
в результате второго варианта FlushChildHashtable(hash, 5) будет заменено на
if ( "hash" == "SYSTEM_HASHTABLE" ) then
call FlushChildHashtable_HSD(5)
else
call FlushChildHashtable(hash, 5)
endif
первый вариант предпочтительнее если подобных переменных немного
второй если необходимо передавать в функцию FlushChildHashtable_HSD не только инт но и сам хэштейбл
если же тебе нужно проверять не по названию а по значению то используй 2 вариант
только вместо строк сравнивай сами переменные
второй если необходимо передавать в функцию FlushChildHashtable_HSD не только инт но и сам хэштейбл
если же тебе нужно проверять не по названию а по значению то используй 2 вариант
только вместо строк сравнивай сами переменные
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Пушистый
Отредактирован nvc123
либо можно так
второй если необходимо передавать в функцию FlushChildHashtable_HSD не только инт но и сам хэштейбл
если же тебе нужно проверять не по названию а по значению то используй 2 вариант
только вместо строк сравнивай сами переменные