C++ 是否可以将Boost序列化用作仅标题库?
下面是使用great library的一个简单示例 要编译库,我需要链接到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
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,您自己的序列化库?或您自己的增强序列化的修补程序?我自己的序列化库。这部分是为了自学模板元编程和部分原因是我需要它。