【发布时间】:2015-07-29 16:48:34
【问题描述】:
我正在使用 BOOST_STRONG_TYPEDEF 从 POD 类型中定义强类型。例如,我想从int 定义一个新类型。但是,如果我尝试将我的新类型与不是 int 的东西(例如 unsigned int、size_t)进行比较,我会收到“使用重载运算符 '
例如:
#include <boost/serialization/strong_typedef.hpp>
BOOST_STRONG_TYPEDEF( int, Foo );
int main(int argc, const char * argv[]) {
Foo f( 10 );
unsigned int j = 11;
bool result = j < f; // Error
size_t s = 100;
result = s < f; // Error
int h = 101;
result = h < f; // ok
return 0;
}
我可以通过为特定类型实现特定的关系运算符来修复这些错误。例如:
bool operator<(const size_t& y, const Foo& x) {
return y < x.t;
}
由于 BOOST_STRONG_TYPEDEF 提供了从 Foo 到 int 的转换运算符,我本来希望 (unsigned int) < (Foo) 编译成与 (unsigned int) < (int) 相同的东西,但我想不会。
我的问题是:有没有办法避免为我想要比较的每种类型实现每个运算符?
【问题讨论】:
标签: c++ boost types operator-overloading typedef