我试图理解这段代码,遇到了一些我无法解释的内容:
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来存档模拟状态,因此可以在以后重新加载并继续。我正在尝试了解归档实际上是如何发生的,但是带有箭头的线使我感到困惑。在某些时候,必须进行实际的节省,而我猜箭头就是发生的地方。
某些事情必须继续进行,但是这行到底是什么意思,&
在这里做什么?是某种参考吗?我查看了some documentation,它包含<<
运算符,但没有&
答案 0 :(得分:2)
此处的&符号是二进制&
运算符。对于整数类型,这将是按位AND运算符(就像<<
将是左移运算符),但是boost::archive::text_oarchive
不是整数类型。必须为此类定义了运算符重载函数。因此,该运算符将调用该函数。
根据docs:
sa << x sa & x
这些表达式必须执行完全相同的功能。他们将x的值以及其他信息附加到sa。其他信息由归档的实现定义。通常,此信息是相应的Loading Archive类型正确恢复x值所需的信息。
因此,(*p_arch) & pSim;
将pSim
附加到p_arch
指向的档案中。