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