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