как работают boost :: function и boost :: bind

Мне не нравится, когда магические коробки разбросаны по всему моему коду ... как именно работают эти два класса, чтобы позволить сопоставить практически любую функцию с объектом функции, даже если функция <> имеет совершенно другой параметр, установленный на тот, который я передаю...