【发布时间】:2024-04-13 16:10:01
【问题描述】:
我正在尝试理解这部分代码,但遇到了一些我无法解释的内容:
template<unsigned ELEMENT_DIM, class SIM, unsigned SPACE_DIM>
void CellBasedSimulationArchiver<ELEMENT_DIM, SIM, SPACE_DIM>::Save(SIM* pSim)
{
// Do a bunch of stuff
boost::archive::text_oarchive* p_arch = arch_opener.GetCommonArchive();
// Archive the simulation (const-ness would be a pain here)
(*p_arch) & pSim; //<--------------- What is this?
}
这个函数的重点是使用 boost 来存档模拟的状态,所以它可以在以后重新加载并继续。我试图了解归档实际上是如何发生的,但是带有箭头的线让我感到困惑。在某些时候,实际的保存必须发生,我猜箭头就是它发生的地方。
boost 肯定有什么问题,但这条线到底是什么意思,& 在这里做什么?它是某种参考吗?我查看了some documentation,它包含<< 运算符,但没有&
【问题讨论】:
-
您提供的链接确实包含此内容,即
ar & a.legs_;。它还在该代码示例上方有文本。 -
直觉告诉我它在存储在
p_arch的对象上调用operator&,但它看起来有点奇怪,所以我不能100% 确定。特别是因为在这里调用operator &通常对普通对象没有任何意义。但是 boost 可能会做一些不同的事情。 -
boost 序列化库是滥用运算符重载如何导致痛苦的一个很好的例子。
-
@chris 好的,我找到了你说的那部分,但我仍然没有更聪明
-
@Phill,我对这个库不太熟悉,但是有了operator&,在serialize()中就不需要区分序列化和恢复了。这样,这听起来主要是为了方便。我还建议通过documentation。您链接到的是一本关于 Boost 的书。
标签: c++ pointers boost reference