2
是否有任何結構或類或容器,我可以用它來存儲可串行化的異構項目。例如說,我有一個int,float和另一個類對象。我想在運行時將它們全部存儲在特定的容器中,並通過類傳遞它。 C++是否給出了這樣的選項。類或容器來存儲異構項目在C++
是否有任何結構或類或容器,我可以用它來存儲可串行化的異構項目。例如說,我有一個int,float和另一個類對象。我想在運行時將它們全部存儲在特定的容器中,並通過類傳遞它。 C++是否給出了這樣的選項。類或容器來存儲異構項目在C++
您可以使用vector
of boost::variant
,例如,
#include <boost/serialization/vector.hpp>
#include <boost/serialization/variant.hpp>
// note: the above are serializable variants of
// #include <vector>
// #include <boost/variant.hpp>
#include <fstream>
#include <iostream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <algorithm>
#include <iterator>
struct Point {
float x, y;
Point(float x_, float y_) : x(x_), y(y_) {}
Point() : x(0), y(0) {}
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version) {
ar & x;
ar & y;
}
};
std::ostream& operator<< (std::ostream& o, const Point& p) {
return o << "{x:" << p.x << ", y:" << p.y << "}";
}
int main() {
std::vector<boost::variant<int, float, Point> > vec;
vec.push_back(12345);
vec.push_back(0.65432f);
vec.push_back(Point(2.5, 6.7));
{
std::ofstream f("1.txt");
{
boost::archive::text_oarchive serializer(f);
serializer << vec;
}
}
{
std::ifstream f("1.txt");
{
std::vector<boost::variant<int, float, Point> > result;
boost::archive::text_iarchive deserializer(f);
deserializer >> result;
std::copy(result.begin(), result.end(),
std::ostream_iterator<boost::variant<int, float, Point> >(std::cout, "\n"));
}
}
return 0;
}