Классы типов на C++
Уже было описано как реализовать монады на C++ без классов типов. Я же хочу показать, как можно реализовать классы типов, использую в качестве примера монады. Этот прием широко применяется в языке Scala, но может быть использован и в C++. Кратко я его описал в качестве иллюстрации трудностей унифицированного описания библиотек, сейчас же продемонстрирую его реализацию. Нужно отметить что классы типов применяются не только в декларативных языках, как Haskell и Mercurry, но о нашли свое отражение в достаточно классических Go и Rust. Этот прием так же подходит для реализации мультиметодов из Common Lisp и Clojure. C++ я не брал в руки уже лет шесть, так что код может быть не идеоматичным и не использовать новые (полезные) фичи. Кроме того, я полностью игнорирую проблему управления памятью — практикующие C++ справятся с этим лучше меня. Работоспособность кода проверялась на gcc 4.7.3.Сеанс черной магии с полным разоблачением