LINUX.ORG.RU

История изменений

Исправление forCe, (текущая версия) :

void foo(shape_info_t *si, void *sh1, void *sh2)

первый параметр — это this в С++ (адрес self в ObjC, Current в Eiffel). сам объект.

Мне кажется, что ты не так понял этот пример. Сами фигуры передаются параметрами sh1 и sh2, а вот набор функций - первым. Это не аналог this. И тут действительно набор функций не привязан ни к какому объекту.

Вот код на haskell

class Shape a where 
  draw :: a -> ()

foo :: (Shape a) => a -> a -> ()

Как мы можем делать что-то похожее на Си? Да примерно так же, как делалось в том самом примере=) А ты там видишь ООП, а не тайпклассы Haskell.

Если что-то реализовано через указатели на функции, то это еще не повод записывать сами указатели на функции в ту или иную концепцию. В ООП нет указателей на функции. В ООП есть объекты, посылка сообщений и т.п.

Исходная версия forCe, :

void foo(shape_info_t *si, void *sh1, void *sh2)

первый параметр — это this в С++ (адрес self в ObjC, Current в Eiffel). сам объект.

Мне кажется, что ты не так понял этот пример. Сами фигуры передаются параметрами sh1 и sh2, а вот набор функций - первым. Это не аналог this. И тут действительно набор функций не привязан ни к какому объекту.

Вот код на haskell

class Shape a where 
  (draw) :: a -> ()

foo :: (Shape a) => a -> a -> ()

Как мы можем делать что-то похожее на Си? Да примерно так же, как делалось в том самом примере=) А ты там видишь ООП, а не тайпклассы Haskell.

Если что-то реализовано через указатели на функции, то это еще не повод записывать сами указатели на функции в ту или иную концепцию. В ООП нет указателей на функции. В ООП есть объекты, посылка сообщений и т.п.