// Простая реализация оператора индекса int &MyClass::operator[] (int index) { return internal_array[index]; } // Неизменяемый вариант который работает для константных ссылок на обьект const int &MyClass::operator[] (int index) const { return internal_array[index]; } // Регистрирует константый и неконстантный варианты для сохранения const-корректности r = engine->RegisterObjectBehaviour("mytype", asBEHAVE_INDEX, "int &f(int)", asMETHODPR(MyClass, operator[], (int), int&), asCALL_THISCALL); assert( r >= 0 ); r = engine->RegisterObjectBehaviour("mytype", asBEHAVE_INDEX, "const int &f(int) const", asMETHODPR(MyClass, operator[], (int) const, const int&), asCALL_THISCALL); assert( r >= 0 );
Регистрация как asBEHAVE_VALUE_CAST или asBEHAVE_IMPLICIT_VALUE_CAST позволяет движку знать яввляется ли преобразование косвенным.
// Преобразует строку в число int ConvStringToInt(const std::string &s) { return atoi(s.c_str()); } // Регистрируем отношение r = engine->RegisterObjectBehaviour("string", asBEHAVE_VALUE_CAST, "int f() const", asFUNCTION(ConvStringToInt), asCALL_CDECL_OBJLAST); assert( r >= 0 );
Возвращаемый тип оператора преобразования должен быть bool или void. Преобразование значение создаст новое значение, поэтому если функция возвращает указатель или хендл, помните что он указывает на новое значение а не на оригинальное.