История изменений
Исправление waker, (текущая версия) :
Хотя у меня ни разу не возникало нужды в подобном — тащить вместе с объектом какие-то функции.
правильно, потому что функции нужны _в классе_, а не в объекте.
а классы в примитивных объектных системах не используются.
классом, по сути, является набор методов для работы с объектом.
твой пример понятен, но это не самая лучшая реализация.
гораздо приятнее работать, если класс и объект разделены.
тогда у тебя получится вот такой класс:
typedef struct {
void (*)prop(object *this, int n);
} class;
объект:
typedef struct {
class *klass;
int n;
} object;
создаем классы:
class plus_class = {
.prop = plus
};
class minus_class = {
.prop = minus
};
создаем объекты
object objects[2] = {
{
.klass = &plus_class,
.n = 10
},
{
.klass = &minus_class,
.n = 20
}
};
дальше дергаем:
objects[0].klass->prop(&objects[0], 50);
objects[1].klass->prop(&objects[1], 25);
Исправление waker, :
Хотя у меня ни разу не возникало нужды в подобном — тащить вместе с объектом какие-то функции.
правильно, потому что функции нужны _в классе_, а не в объекте.
а классы в примитивных объектных системах не используются.
классом, по сути, является набор методов для работы с объектом.
твой пример понятен, но это не самая лучшая реализация.
гораздо приятнее работать, если класс и объект разделены.
тогда у тебя получится вот такой класс:
typedef struct {
void (*)prop(object *this, int n);
} class;
объект:
typedef struct {
class *klass;
int n;
} object;
создаем классы:
class plus_class = {
.prop = plus
};
class minus_class = {
.prop = minus
};
создаем объекты
object objects[2] = {
{
.klass = &plus_class,
.n = 10
},
object obj_minus = {
.klass = &minus_class,
.n = 20
}
};
дальше дергаем:
objects[0].klass->prop(&objects[0], 50);
objects[1].klass->prop(&objects[1], 25);
Исходная версия waker, :
Хотя у меня ни разу не возникало нужды в подобном — тащить вместе с объектом какие-то функции.
правильно, потому что функции нужны _в классе_, а не в объекте.
а классы в примитивных объектных системах не используются.
классом, по сути, является набор методов для работы с объектом.
твой пример понятен, но это не самая лучшая реализация.
гораздо приятнее работать, если класс и объект разделены.
тогда у тебя получится вот такой класс:
typedef struct {
void (*)prop(object *this, int n);
} class;
объект:
typedef struct {
class *klass;
int n;
} object;
создаем классы:
class plus_class = {
.prop = plus
};
class minus_class = {
.prop = minus
};
создаем объекты
object objects[2] = {
{
.klass = &plus_class,
.n = 10
},
object obj_minus = {
.klass = &minus_class,
.n = 20
}
};
дальше дергаем:
objects[0].klass->prop(&objects[0], 50);
objects[1].klass->prop(&objects[1], 25);