Это довольно просто.
Например, допустим, вы хотите использовать функцию stat в своем коде, но хотите иметь возможность модульного тестирования своего кода или дажеизменить, какую функцию использовать во время выполнения.Затем вы должны добавить базовый класс:
struct FunctionApiBase
{
virtual ~FunctionApiBase{}
virtual int stat(const char *path, struct stat *buf) = 0;
};
реализовать его:
struct RealFunctionApi : public FunctionApiBase
{
virtual int stat(const char *path, struct stat *buf)
{
::stat( path, buf );
}
};
Затем создать объект типа RealFunctionApi и вызвать его stat вместо реальной функции.
Если я понимаю текст в вашей ссылке, толстый адаптер содержит только более сложный код.