全局重载前缀运算符 ++/--

Overloading prefix operators ++/-- globally

我可以像这样全局重载一元 + 和 - 运算符:

#include <cstdint>

enum local_states_t
{
    LOCAL_STATE_A = 1,
    LOCAL_STATE_B,
    LOCAL_STATE_LIMIT,
};

typedef uint32_t state_type_t;

state_type_t operator-(local_states_t state) { return static_cast<state_type_t>(state | (1<<31)); }

我可以对前缀 ++/-- 做同样的事情吗?这里的问题当然是编译器如何知道它只需要为 local_state_t - 类型调用这些函数?前缀运算符没有虚拟值..

(来自评论)

是的 - 您可以定义 local_states_t& operator++(local_states_t &)。不像 类,枚举不能有成员,所以你需要一个自由函数。

你也可以定义为returnstate_type_t,这是不常见但允许的。