Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost序列化:默认构造函数必须是公共的吗?_C++_Serialization_Boost - Fatal编程技术网

C++ Boost序列化:默认构造函数必须是公共的吗?

C++ Boost序列化:默认构造函数必须是公共的吗?,c++,serialization,boost,C++,Serialization,Boost,只是一点点的信息,似乎没有记录在任何地方。有人知道吗?因为我想将其私有化,希望构造函数可以从声明为朋友的boost::serialization::access调用。测试示例。考虑到这一点,我认为这是一个特性,如果将来有一个版本不允许访问授权机制向私有默认构造函数授予访问权,我会感到不安 #include <boost/serialization/access.hpp> #include <boost/serialization/shared_ptr.hpp> #incl

只是一点点的信息,似乎没有记录在任何地方。有人知道吗?因为我想将其私有化,希望构造函数可以从声明为朋友的
boost::serialization::access
调用。

测试示例。考虑到这一点,我认为这是一个特性,如果将来有一个版本不允许访问授权机制向私有默认构造函数授予访问权,我会感到不安

#include <boost/serialization/access.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
#include <iostream>

struct Colour {
    double colour[4];
    boost::shared_ptr<Colour> alt;
    static boost::shared_ptr<Colour> test() {
       return boost::shared_ptr<Colour>(new Colour);
    }
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int /*file_version*/) {
        ar & colour;
    }

    Colour() {
        std::cout << "Getting called" << std::endl;
    }
};

int main() {
    boost::shared_ptr<Colour> c = Colour::test();
    c->alt = Colour::test();

    std::cout << "Created" << std::endl;

    std::stringstream str;
    boost::archive::text_oarchive oa(str);
    oa & c;

    std::cout << "Saved" << std::endl;

    c.reset();

    boost::archive::text_iarchive ia(str);
    ia & c;

    std::cout << "Restored" << std::endl;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构色{
双色[4];
boost::shared_ptr alt;
静态boost::共享测试{
返回增强::共享的ptr(新颜色);
}
私人:
好友类boost::serialization::access;
模板
无效序列化(存档&ar,常量unsigned int/*文件\u version*/){
ar&color;
}
颜色(){

std::cout测试示例。考虑到这一点,我认为这是一个功能,如果将来的版本不允许访问授权机制向私有默认构造函数授予访问权限,我会感到不安

#include <boost/serialization/access.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
#include <iostream>

struct Colour {
    double colour[4];
    boost::shared_ptr<Colour> alt;
    static boost::shared_ptr<Colour> test() {
       return boost::shared_ptr<Colour>(new Colour);
    }
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int /*file_version*/) {
        ar & colour;
    }

    Colour() {
        std::cout << "Getting called" << std::endl;
    }
};

int main() {
    boost::shared_ptr<Colour> c = Colour::test();
    c->alt = Colour::test();

    std::cout << "Created" << std::endl;

    std::stringstream str;
    boost::archive::text_oarchive oa(str);
    oa & c;

    std::cout << "Saved" << std::endl;

    c.reset();

    boost::archive::text_iarchive ia(str);
    ia & c;

    std::cout << "Restored" << std::endl;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
结构色{
双色[4];
boost::shared_ptr alt;
静态boost::共享测试{
返回增强::共享的ptr(新颜色);
}
私人:
好友类boost::serialization::access;
模板
无效序列化(存档&ar,常量unsigned int/*文件\u version*/){
ar&color;
}
颜色(){

std::我想用
boost::serialization::access
应该没问题吧。你试过了吗?这种事情很容易就决定了。@Seth绝对同意,我完全同意。然后将结果报告给全世界。不,它太快了,当任何人需要知道的时候,他们都可以自己尝试。或者更好的是,只是我不同意。我相信这应该是文档的一部分,对我来说,尝试起来很麻烦,我相信谷歌在10秒内把它编辑好比为任何人编写代码都要快,如果我这么认为的话,很可能至少有一个人会这样做。即使是我尝试过,而且如果没有其他人知道答案,我会的,我确实相信这些信息值得在这里发表。我认为使用
boost::serialization::access
应该没问题。你试过吗?这种事情很容易通过试一下就决定了。@Seth绝对同意。然后将结果报告给全世界。N啊,它是如此之快,以至于当任何人需要知道的时候,他们可以自己尝试。或者更好的是,就像你不在乎一样编程,然后在出现错误时修复它:)@Seth:我不同意。我认为它应该是文档的一部分,对我来说,尝试是一件麻烦事,我相信谷歌在10秒内为任何人编写代码要比我付费更快这样的话,很可能至少有一个人知道。即使是我尝试过,如果没有其他人知道答案,我也会尝试过,我相信这个信息值得关注。