我不明白是什么意思typedef void (Testable::*bool_type)() const;
已应用于operator
是这样的代码
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
相当于
class Testable {
public:
void operator ()() const {
...
}
};
答案 0 :(得分:2)
class Testable {
typedef void (Testable::*bool_type)() const;
public:
operator bool_type() const {
...
}
};
...定义了对bool_type
的隐式转换,这是指向成员类型的无法访问的指针。
这是一种C ++ 03技术,可以提供对bool
的隐式转换,同时避免意外的隐式转换,特别是对于函数调用重载解析。返回的成员指针转换为bool
但不转换为可以设想用于函数参数的任何类型。相反,纯bool
结果将转换为例如int
和void*
结果(used by C++03 iostreams)与void*
正式参数匹配。
使用C ++ 11及更高版本,您可以使用 explicit
,如下所示:
explicit operator bool() const { return whatever; }
但更好的是,定义一个命名转换函数,例如
auto is_empty() const -> bool { return whatever; }
在C ++ 03中通常也更好。 : - )
关于“这样的代码等同于......”,不,它不是。