Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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++_Boost_Boost Serialization_Header Only - Fatal编程技术网

C++ 是否可以将Boost序列化用作仅标题库?

C++ 是否可以将Boost序列化用作仅标题库?,c++,boost,boost-serialization,header-only,C++,Boost,Boost Serialization,Header Only,下面是使用great library的一个简单示例 要编译库,我需要链接到boost\u序列化预编译库 $ c++ -std=c++11 example.cpp -o example.x -lboost_serialization ^^^^^^^^^^^^^^^^^^^^^ 该库采用了大量模板,虽然内部很复杂,但实际代码(函数体)非常简单。只有少数参考文献需要链接,即: boost::archive::text

下面是使用great library的一个简单示例

要编译库,我需要链接到
boost\u序列化
预编译库

$ c++ -std=c++11 example.cpp -o example.x -lboost_serialization
                                          ^^^^^^^^^^^^^^^^^^^^^
该库采用了大量模板,虽然内部很复杂,但实际代码(函数体)非常简单。只有少数参考文献需要链接,即:

boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::ostream&, unsigned int)
boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::text_iarchive_impl(std::istream&, unsigned int)
boost::archive::text_iarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()
boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::~text_iarchive_impl()
...
boost::archive::archive_exception::~archive_exception()'
boost::archive::text\u oarchive\u impl::text\u oarchive\u impl(std::ostream&,unsigned int)
boost::archive::text\u iarchive\u impl::text\u iarchive\u impl(std::istream&,unsigned int)
boost::archive::text\u iarchive\u impl::~text\u oarchive\u impl()
boost::archive::text\u iarchive\u impl::~text\u iarchive\u impl()
...
boost::archive::archive_exception::~archive_exception()
是否有可能在不链接为仅标题库的情况下使用该库?

例如,一些未记录的欺骗或黑客

这将使它更易于在某些超级计算机集群和环境中使用,而在这些环境中,编译Boost并不是那么简单

#include<sstream>
#include<numeric>
#include<boost/archive/text_oarchive.hpp> // needs linking 
#include<boost/archive/text_iarchive.hpp>
#include<boost/serialization/vector.hpp>

int main(){

    std::vector<double> v(10); std::iota(v.begin(), v.end(), 0);
    std::stringstream ss;
    {
        boost::archive::text_oarchive toa(ss);
        toa << v;
    }
    std::vector<double> v2;
    boost::archive::text_iarchive tia(ss);
    tia >> v2;
    assert(v == v2);
}
#包括
#包括
#包含//需要链接
#包括
#包括
int main(){
std::vector v(10);std::iota(v.begin(),v.end(),0);
std::stringstream-ss;
{
boost::archive::text_oarchive toa(ss);
toa>v2;
断言(v==v2);
}

编辑:如果库像Boost.Asio那样提供了仅作为标题的选项,我会非常酷(.)



EDIT2:Boost.Serialization的作者和维护者拒绝了只将其作为头文件的想法。

>编译Boost并不那么简单的环境。-你必须在某个地方编译你的程序。为什么不在那里编译Boost呢?无论如何,你可以尝试#包含cpp文件,看看会发生什么。b但这不是很像编译boost吗?我尝试了
#include
ing
.cpp
文件。我能够在一些简单的情况下让它工作,但上面的例子没有。我开始得到
错误:重新定义“class boost::archive::detail::extra_detail::map”
(正如预期的那样,包括cpp很快就会变得一团糟)这是我多年来一直想要的东西。如果任何Boost库都应该是只包含头的,
serialization
就是这样。但事实并非如此,所以我最终开始使用我的own@Nemo,您自己的序列化库?或您自己的增强序列化的修补程序?我自己的序列化库。这部分是为了自学模板元编程和部分原因是我需要它。