AngelScript Help

funcdef

https://www.angelcode.com/angelscript/sdk/docs/manual/doc_global_funcdef.html

Объявляет сигнатуру функции для хранения функции в переменной или передачи аргументом.

funcdef void A(string); // Объявляем сигнатуру функции void B(string C) { // Объявляем функцию, подходящую под сигнатуру print(C); } void D(A& E) { // Объявляем функцию, которая принимает функцию, подходящую под сигнатуру E("Вызываем функцию, переданную по ссылке"); } void [[[main|main.html]]](){ A@ F = @B; // Объявляем переменную где тип является сигнатурой функции D(@F); // Передаём переменную в функцию }

Встроенные сигнатуры

По умолчанию в игре определены две сигнатуры, которые используются для внутриигровых триггеров и таймеров:

void CallbackFunc(); bool BoolexprFunc();

Методы класса

Для того, чтоб передать метод класса аргументом необходимо вручную привязать экземпляр класса к методу:

class A { A() [[[delete|constructor-default.html#delete]]]; A(string name){ [[[this|this.html]]].name = name; } string name; bool m(){ return name == "2"; } } void [[[main|main.html]]](){ A a1("1"); A a2("2"); BoolexprFunc @f2 = BoolexprFunc(a2.m); // Привязываем экземпляр класса к методу print(f2() + "\n"); // true }

Утечка

В данном примере сработает только один деструктор:

class A { A() [[[delete|constructor-default.html#delete]]]; A(string name){ [[[this|this.html]]].name = name; } [[[~|destructor.html]]]A(){ print(name); } string name; void m(){} } void [[[main|main.html]]](){ A a1("1"); A a2("2"); TimerStart(CreateTimer, 0.f, false, CallbackFunc(a2.m)); } // Деструктор для a2 вызван не будет
Last modified: 25 December 2024