Annotation of parser3/src/doc/ClassExample1.dox, revision 1.1
1.1 ! paf 1: /** @page ClassExample1 Пример создания простого класса (только методы)
! 2:
! 3: Чтобы создать свой класс, состоящий только из методов[таков, например, класс random],
! 4: нужно положить в каталог classes/ модуль на C++ с расширением .С,
! 5: в котором...
! 6:
! 7: 1. Определить потомка Methoded, определяющего Methoded::used_directly в true.
! 8:
! 9: 2. Оформить методы объекта так[ Native_code_ptr ]:
! 10: @code
! 11: static void _test(Request& r, const String& method_name, MethodParams *params) {
! 12: Pool& pool=r.pool();
! 13:
! 14: ...
! 15:
! 16: // ошибки генерировать так:
! 17: if(error_code)
! 18: PTHROW(0, 0,
! 19: &method_name, // адрес String, содержащей текст/место ошибки
! 20: "проблема %d", error_code);
! 21:
! 22: // выдавать текст так:
! 23: if(text_result)
! 24: r.write_assign_lang(*new(pool) VString(pool, "тест"));
! 25:
! 26: // выдавать объекты так:
! 27: if(object_result)
! 28: r.write_no_lang(*new(pool) VInt(pool, 48));
! 29: }
! 30: @endcode
! 31:
! 32: 3. В конструкторе задать имя класса и зарегистрировать методы:
! 33:
! 34: @code
! 35: MExample1::MExample1(Pool& apool) : Methoded(apool) {
! 36: set_name(*NEW String(pool(), "example1"));
! 37:
! 38:
! 39: // ^example1:test[]
! 40: add_native_method("test", Method::CT_STATIC, _test, 0, 0);
! 41: }
! 42: @endcode
! 43:
! 44: @see Value::set_name, VStateless_class::add_native_method
! 45:
! 46: 4. И, наконец, определить производящую функцию, с именем M{имя_файла_с_заглавной_буквы}_create:
! 47: @code
! 48: Methoded *MExample1_create(Pool& pool) {
! 49: return new(pool) MExample1(pool);
! 50: }
! 51: @endcode
! 52:
! 53: */
E-mail: