对于虚拟基类的所有派生类型,是否必须调用<?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()
答案 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;