gpt4 book ai didi

c++ - boost::archive::text_oarchive 的简单扩展

转载 作者:行者123 更新时间:2023-11-30 05:33:03 26 4
gpt4 key购买 nike

我正在尝试将成员变量添加到 Boost 存档类。正在关注this ,我想到了:

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <fstream>

class MyOArchive : public boost::archive::text_oarchive_impl<MyOArchive>
{
public:
bool MyData;

friend class boost::archive::detail::common_oarchive<MyOArchive>;
friend class basic_text_oarchive<MyOArchive>;
//friend class boost::serialization::save_access; // save_access in namespace boost::serialization does not name a type

MyOArchive(std::ostream& os, unsigned int flags = 0) : boost::archive::text_oarchive_impl<MyOArchive>(os, flags) {}

};

class MyClass
{
public:

private:
friend class boost::serialization::access;

double Value;

template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & Value;
}

};


int main()
{
MyClass myClass;

std::ofstream outputStream("test.txt");
//boost::archive::text_oarchive outputArchive(outputStream);
MyOArchive outputArchive(outputStream);
outputArchive << myClass;
outputStream.close();

return 0;
}

但是,我收到链接器错误:

undefined reference to boost::archive::text_oarchive_impl<MyOArchive>::text_oarchive_impl(std::ostream&, unsigned int)

谁能解释这里出了什么问题?我不需要重新实现存档的任何功能,只需附加此成员MyData .

最佳答案

啊。发现了。

您需要在链接到最终产品的一个 TU 中包含用于基本实现的 ipp

#include <boost/archive/impl/basic_text_oarchive.ipp>
#include <boost/archive/impl/text_oarchive_impl.ipp>

此外,save_access 位于不同的 caSTLe 命名空间中:

friend class boost::archive::save_access;

Live On Coliru

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

#include <boost/archive/impl/basic_text_oarchive.ipp>
#include <boost/archive/impl/text_oarchive_impl.ipp>
#include <fstream>

class MyOArchive : public boost::archive::text_oarchive_impl<MyOArchive> {
public:
bool MyData;

friend class boost::archive::detail::common_oarchive<MyOArchive>;
friend class basic_text_oarchive<MyOArchive>;
friend class boost::archive::save_access;

MyOArchive(std::ostream &os, unsigned int flags = 0) : boost::archive::text_oarchive_impl<MyOArchive>(os, flags) {}
};

class MyClass {
private:
friend class boost::serialization::access;

double Value;

template <class Archive> void serialize(Archive &ar, unsigned) { ar &Value; }
};

int main() {
MyClass myClass;

{
std::ofstream outputStream("test.txt");

MyOArchive outputArchive(outputStream);
outputArchive << myClass;
}
}

输出是

22 serialization::archive 13 0 0 6.95328877045326431e-310

关于c++ - boost::archive::text_oarchive 的简单扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com