Иногда необходимо из функции одного класса вызвать функцию обратного вызова другого, при этом не задавая жёстко тип класса, а лишь определяя интерфейс функции(поведение).
В C++ нельзя сделать шаблонные typedef'ы. Но, как известно, если нельзя, но очень хочется, то можно. Для этого используем такой trick: завернём нужный typedef в шаблонную структуру.