История изменений
Исправление 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.
Если что-то реализовано через указатели на функции, то это еще не повод записывать сами указатели на функции в ту или иную концепцию. В ООП нет указателей на функции. В ООП есть объекты, посылка сообщений и т.п.