Есть ли аналог оператора tagof в с++?
(Речь идёт конкретно о получении тега переменной, созданной в павн (например, Float:), а не о получении типа переменной (char, int...))
Вид для печати
Есть ли аналог оператора tagof в с++?
(Речь идёт конкретно о получении тега переменной, созданной в павн (например, Float:), а не о получении типа переменной (char, int...))
Для одиночного аргумента с несколькими возможными тегами
native Func({_,Float}:arg);
можно добавить дополнительный аргумент, в который по умолчанию будет передаваться ID тега:
native Func({_,Float}:arg, tagid=tagof(arg));
Затем на стороне плагина следует передать значение такого доп. аргумента (tagid) в функцию amx_GetTag(), и та вернёт название тега.
Почему нужно работать с названиями тегов, а не с числами? Потому что у каждого скомпилированного скрипта (*.amx) есть своя таблица тегов, в которой хранятся только те теги, которые используются в скрипте. Т.е. у каждого скрипта своё содержимое таблицы; нет универсальных ID тегов, которые подойдут для всех скриптов. Единственные исключения - тег "_" всегда имеет индекс 0, а "bool" - индекс 1. Остальные теги зависят от кода, в том числе от порядка подключения инклудов, в которых эти теги объявляются.
Естественно, для функций с вариативными аргументами, например:
native Func({_,bool,Float}:...);
провернуть вышеописанный трюк с tagof не выйдет. В таких случаях уже ничего не сделать.