Avoid duplicated += -= operator code
I actually quite like this pattern and use it relatively often. I'm not sure if there is something better than functors for this - if there is, I'm not really aware of it. That being said, with C++11, I'd write this in a slightly different way:

struct num {
  int val;

  const num&amp; operator +=(const num &amp; rhs) {
    return op_equals(rhs, std::plus&lt;int&gt;());
  }

  const num&amp; operator -=(const num &amp; rhs) {
    return op_equals(rhs, std::minus&lt;int&gt;());
  }

  template &lt;typename op&gt;
  const num &amp; op_equals(const num &amp; rhs, op&amp;&amp; o) {
    val = o(val, rhs.val);
    return *this;
  }
};


Note the rvalue reference (which is actually a "universal reference", so can bind to either an lvalue or rvalue reference), and the movement of op to a parameter - I don't really like having to specify it as a template parameter which then gets instantiated and called in the function. I think this way is slightly cleaner.