boost 库有一个组件,叫做 optional,用来保存一些可有可无的成员变量,说明见这里,http://www.boost.org/doc/libs/…,样例用法如下
#include <boost/optional.hpp> #include <stdio.h> #include <string> int main() { boost::optional<std::string> name; if (name) { printf("name is %s\n", name->c_str()); } else { printf("no name\n"); } return 0; }
注意两个点,一个是这个是指针调用 c_str(),另外就是,一个对象本身可以放在 if 里面去 test,这个之前还没想过,查了资料,发现在实现上是这么来搞的:
#include <boost/optional.hpp> #include <stdio.h> #include <string> class Object { public: std::string name; operator bool() { if (name.empty()) { return false; } else { return true; } } }; int main() { Object obj; if (obj) { printf("obj is %s\n", obj.name.c_str()); } else { printf("no obj...\n"); obj.name = "foo"; if (obj) { printf("obj has name now %s\n", obj.name.c_str()); } else { printf("still no obj\n"); } } return 0; }
以前只是知道 operator+ 之类的,都不知道 operator bool() 这种