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