📅  最后修改于: 2023-12-03 14:39:49.406000             🧑  作者: Mango
C++ Boost库为程序员提供了广泛的数据类型和算法支持。以下是一些常见的数据类型:
boost::optional 是一个可以代表“有值”或者“无值”的数据类型,类似于 Java 中的 Optional 类。
#include <boost/optional.hpp>
#include <iostream>
#include <string>
boost::optional<std::string> my_optional() {
std::string my_string = "hello";
return my_string;
}
int main() {
boost::optional<std::string> value = my_optional();
if (value) {
std::cout << *value << std::endl;
} else {
std::cout << "no value" << std::endl;
}
return 0;
}
boost::variant 是一个变量类型,可以在不同的数据类型之间进行转换。
#include <boost/variant.hpp>
#include <iostream>
#include <string>
void print_variant(boost::variant<int, std::string> v) {
if (boost::get<int>(&v)) {
std::cout << "int: " << boost::get<int>(v) << std::endl;
} else if (boost::get<std::string>(&v)) {
std::cout << "string: " << boost::get<std::string>(v) << std::endl;
}
}
int main() {
boost::variant<int, std::string> my_variant;
my_variant = 42;
print_variant(my_variant);
my_variant = "hello";
print_variant(my_variant);
return 0;
}
boost::any 可以存储任何类型的值并且可以进行类型安全的访问。
#include <boost/any.hpp>
#include <iostream>
#include <string>
int main() {
boost::any my_any = "hello";
std::cout << boost::any_cast<std::string>(my_any) << std::endl;
my_any = 42;
std::cout << boost::any_cast<int>(my_any) << std::endl;
return 0;
}
boost::lexical_cast 可以进行类型之间的转换,比如将字符串转换成数字。
#include <boost/lexical_cast.hpp>
#include <iostream>
int main() {
int my_int = boost::lexical_cast<int>("42");
std::string my_string = boost::lexical_cast<std::string>(123);
std::cout << my_int << std::endl;
std::cout << my_string << std::endl;
return 0;
}
boost::serialization 可以进行对象的序列化和反序列化,方便对象存储和传输。
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/string.hpp>
#include <iostream>
#include <sstream>
#include <string>
class MyObject {
public:
MyObject(std::string name) : name_(name) {}
friend class boost::serialization::access;
template <class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar& name_;
}
private:
std::string name_;
};
int main() {
MyObject my_object("hello");
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << my_object;
MyObject my_object_copy("");
boost::archive::text_iarchive ia(ss);
ia >> my_object_copy;
std::cout << my_object_copy.serialize() << std::endl;
return 0;
}