Boost动态序列化所有派生类型

时间:2015-09-08 22:17:57

标签: c++ serialization boost

对于虚拟基类的所有派生类型,是否必须调用<?php define('HOST','irrelevant'); define('USERNAME','irrelevant'); define('PASSWORD','irrelevant'); define('DB','irrelevant'); $con = mysqli_connect(HOST,USERNAME,PASSWORD,DB) or die('Unable to connect'); $sql = "select * from orders"; $res = mysqli_query($con,$sql); $result = array(); while($row = mysqli_fetch_array($res)){ array_push($result,array($row[0],$row[1],$row[2],$row[3],$row[4],$row[5])); } var_dump($result); mysqli_close($con); ?> BOOST_CLASS_EXPORT()?有没有办法只指定基类?

这是一些示例代码(我使用的是boost 1.59):

register_type()

1 个答案:

答案 0 :(得分:1)

是的,这是必需的。

你已经看到了机制。宏只是一种自动化宏观扩展时已知的存档类型的register_type舞蹈的方法。

在这种情况下,您可以在Test序列化方法中列出类型,这将是&#34;及时&#34; - 前提是您在此之前不要反序列化Parent多态实例。

这也有效:

class Test {
public:
    int t_ = 0;
    ParentRef parent_;

    Test(int t = 0, ParentRef parent = std::make_shared<RefMem1>()) : t_(t), parent_(parent) {}

    template <class Archive> void serialize(Archive &ar, unsigned) {
        ar.template register_type<RefMem1>();
        ar.template register_type<RefMem2>();
        ar & t_ & parent_; 
    }
};

如果您更改了存档顺序:

    oa << test << the_instance;
    // ...
    ia >> cloned >> the_cloned_instance;

查看 Live On Coliru