Позднее связывание на самом деле не является функцией самого языка Си, а скорее тем, что обеспечивает ваша среда выполнения.
Многие системы будут предоставлять отложенное связывание в качестве функции компоновщика / загрузчика, и вы также можете использовать явные вызовы, такие как dlopen
(для открытия общей библиотеки) и dlsym
(для получения адреса символа в этом библиотека, чтобы вы могли получить к ней доступ или позвонить).
Единственным полупереносимым способом позднего связывания со стандартом C было бы использование некоторой хитрости с system()
, и даже это хотя бы частично зависит от реализации.
Если вы не столько говорите об отложенном связывании, сколько о полиморфизме, вы можете добиться этого с помощью указателей на функции. По сути, вы создаете struct
, в котором есть все данные для типа вместе с указателями на функции для поиска методов для этого типа. Затем в "конструкторе" (обычно это init () функция) вы устанавливаете указатели функций на соответствующие функции для этого типа.
Вам все еще нужно включить весь код, даже если вы его не используете, но можно получить таким образом полиморфизмом.