假设我有一个原始C ++类型的自定义包装器:
class myInt
{
public:
/*stuff here*/
private:
unsigned int data;
}
我该如何制作
myInt mi;
if(mi){...}
以正常整数的方式表现吗? 我能想到的只是写一个显式的布尔强制转换,或者可能覆盖operator == 类似的东西:
if(bool(mi)){...}
if(mi.toBool()){...}
if(mi==true){..}
所有这些都符合目的,但看起来非常丑陋和人为 我还缺少另一种选择吗?
答案 0 :(得分:4)
最好的选择是完全放弃包装。
答案 1 :(得分:3)
您可以制作以下演员操作符,例如:
class myInt
{
public:
operator bool() const { return data != 0; }
private:
unsigned int data;
}
默认情况下是隐式的(这意味着每次编译器发现它需要一个bool并且你提供了一个myInt时它会被使用)。从c ++ 11开始,您可以将其标记为显式,强制将使用限制为显式强制转换,之后它始终是隐式的。
但是你应该注意到这通常是一个坏主意,应该避免:检查the safe bool idiom以获得更多讲座。
接近你的愿望并且更安全的另一个选择是!
运算符的重载:
class myInt
{
public:
bool operator!() const { return data == 0; }
private:
unsigned int data;
}