有段define代码没看懂

有段define代码没有看懂
  #define AOP(OP)                                 \
        void operator OP(T scalar)                      \
        {                                               \
            const int cx = Width();                     \
            const int cy = Height();                    \
            for (int y = 0; y < cy; y ++)               \
            {                                           \
                T* p = RowPtr(y);                       \
                for (int x = 0 ; x < cx; x ++)          \
                {                                       \
                    (*p++) OP scalar;                   \
                }                                       \
            }                                           \
        }                                               \

        /// Usage: Image *= scale;