boost::operators
автоматически определяет операторы типа +
на основе ручных реализаций, таких как +=
, что очень полезно. Чтобы сгенерировать эти операторы для T
, один наследует от boost::operators<T>
, как показано примером boost:
class MyInt : boost::operators<MyInt>
Я знаком с шаблоном CRTP, но я не вижу, как он работает здесь. В частности, я не наследую никаких объектов, поскольку операторы не являются членами. boost::operators
кажется совершенно пустым, но я не очень хорошо читаю исходный код boost.
Может ли кто-нибудь объяснить, как это работает в деталях? Является ли этот механизм общеизвестным и широко используемым?