[personal profile] dmitry_vk

Потихоньку изучаю CLOS MOP. Отличная штука.

Хочу использовать для упрощения создания биндинга cl-gtk2.

Можно, например, с помощью MOP'а один раз написать универсальный конструктор (специализация make-instance), доступ к слотам (специализация slot-value-using-class, slot-boundp-using-class, slot-makunbound-using-class), и можно писать такие конструкции:

(defclass gtk-label ()
  ((angle :g-property-name "angle"
          :allocation :gobject
          :accessor gtk-label-angle
          :g-property-type "gdouble")
   (label :allocation :gobject
          :g-property-name "label"
          :g-property-type "gchararray"
          :accessor gtk-label-label))
  (:metaclass gobject-class)
  (:g-type-name . "GtkLabel"))

Записав такое определение, сразу получаем класс, привязанный к соотвествующему gobject-классу:

можно создавать объекты этого класса, и при создании gtk-label будет создаваться GtkLabel с нужными параметрами:

(defparameter *label* (make-instance 'gtk-label :angle 15.0 :label "Привет, мир!"))

сразу имеем доступ к слотам:

(gtk-label-label *label*)
=>
"Привет, мир!"

Конечно, можно обойтись и без MOP (я использую генератор конструктора и функций доступа к слотам на основе макросов), но с MOP получается уж больно красиво и элегантно.

Еще надо разобраться с тем, как работают метаобъекты для обобщенных функций, и как-то суметь реализовать наследование классов от gobject-классов через MOP.

Надо еще убедиться, что MOP поддерживается хотя бы несколькими свободными реализациями лиспа в достаточном объеме.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

dmitry_vk

April 2023

S M T W T F S
      1
234567 8
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 5th, 2026 06:39 pm
Powered by Dreamwidth Studios