Как сделать структурную типизацию

Один из вариантов реализации структурной типизации.
Структурная типизация - это возможность использовать любой тип данных, который удовлетворяет некоторым требованиям "структурного интерфейса", без каких-либо явных указаний того, что данный тип реализует данный интерфейс.

Простейший пример: если есть некий тип данных POINT { float x, y; }, и есть некий тип MyPoint { float x, y; } то благодаря структурной типизации тип MyPoint можно применять там же, где и POINT (и наоборот). Более того, если объявлен некоторый тип MySuperPoint { int i, j; float z; char str[10]; float z, k, y; } то его тоже можно применять вместо POINT и MyPoint. Для структурной типизации достаточно совпадения имен внутренних имен и совместимости типов.