Apr. 9th, 2009

Потихоньку изучаю 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 поддерживается хотя бы несколькими свободными реализациями лиспа в достаточном объеме.

Profile

dmitry_vk

April 2023

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

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