我在我正在做的应用程序中遇到问题.我需要使用boost序列化序列化一些数据包.根据文档,可以使用BOOST_CLASS_EXPORT_KEY和BOOST_CLASS_EXPORT_IMPLEMENT分别进入.hpp和.cpp文件,以便能够使用多态基指针来序列化派生类.
所以这就是我所拥有的:
.hpp:包含我的班级宣言和最后的 BOOST_CLASS_EXPORT_KEY(mynamespace::mypacket)
.cpp:包含我的类定义和 BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::mypacket)
一切都运行正常,但是当需要序列化时,我得到一个bad_alloc错误.
我通过显式调用register_type<mypacket>()我需要使用的存档上的方法来解决这个问题.
但这是我的问题:boost的EXPORT*是否意味着避免调用register_type方法或者我做错了什么?我觉得在我的代码中做了两次相同的工作,但更多的是我没有看到使用导出密钥+实现的任何优势,如果我们仍然必须在归档后使用register_type!
我在这里和其他地方读过其他一些帖子,似乎我不是唯一一个试验这个问题的人,但我还没有找到任何答案.
我需要(想要)专门化模板类中的方法,只允许某些基本类型.(这不是一个重复的问题,这个)
好吧,我有这个课程:
template<typename TYPE, size_t NB>
class X
{
public:
template<typename arg_type>
X& get(const arg_type var);
}
Run Code Online (Sandbox Code Playgroud)
我想专门化arg_type只允许无符号整数,如下所示:
template<typename TYPE, size_t NB> template<unsigned long> X& X::get(const unsigned long val);
Run Code Online (Sandbox Code Playgroud)
但可以肯定的是,上述内容在msvc2011和gcc上都不起作用
更具体地说,我尝试做的是基于上面的模板化类型编写代码,并编写专门化,以便使用此类X的任何人都不能使用此方法而不是我专门的方法.
这甚至可能吗?如果是的话,这样做是不是很糟糕?
在此先感谢,jav974
我像这样重载了流插入运算符:
template<class Ch, class Tr, class word_type>
std::basic_ostream<Ch, Tr>&
operator << (std::basic_ostream<Ch, Tr>& s, const Mabit::mabit<word_type>& obj)
{
s << obj.to_string(Mabit::DEC, ',');
return s;
}
Run Code Online (Sandbox Code Playgroud)
(mabit是我希望重载工作的类)
也就是说,因为我可以在给不同的参数to_string的方法,我想能够使用标准的流修改一样std::dec,std::hex......在某种程度上,我可以取回他们重载运营商准备好参数作为参数to_string
如果我也可以使用该语言环境(为数千个提取分隔符),那么第二个参数也会有所帮助......
那可能吗 ?
可能重复:
将1s和0s的字符串转换为二进制值
我想将二进制字符串转换为c ++中的整数字符串.例如:
"000000000010" 变 "2"
我有以下约束:我不能将此字符串转换为整数类型,然后再将其转换为字符串,因为该二进制字符串可能非常大!
我已经尝试过这样做,用stringstream标志插入二进制字符串std::stringstream::binary然后使用std::dec标志输出内容,但它不起作用
谢谢大家.