boost :: archive :: text_oarchive的简单扩展 [英] Simple extension of boost::archive::text_oarchive

查看:199
本文介绍了boost :: archive :: text_oarchive的简单扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将成员变量添加到Boost存档类中.在之后,我想到了:/p>

I am trying to add a member variable to a Boost archive class. Following this, I came up with:

#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;
}

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

However, I am getting linker errors:

对boost :: archive :: text_oarchive_impl< MyOArchive> :: text_oarchive_impl(std :: ostream& ;, unsigned int)的未定义引用

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

Can anyone explain what is going wrong here? I don't need to reimplement any of the functions of the archive, just attach this member MyData.

推荐答案

啊.发现了.

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

You need to include the ipps for the basic implementations in exactly one TU that's linked into the end product.

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

此外, save_access 位于另一个 castle 命名空间中:

Also, save_access lives in a different castle namespace:

friend class boost::archive::save_access;

在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

这篇关于boost :: archive :: text_oarchive的简单扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆