小编jav*_*974的帖子

boost序列化和register_type

我在我正在做的应用程序中遇到问题.我需要使用boost序列化序列化一些数据包.根据文档,可以使用BOOST_CLASS_EXPORT_KEYBOOST_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!

我在这里和其他地方读过其他一些帖子,似乎我不是唯一一个试验这个问题的人,但我还没有找到任何答案.

c++ serialization boost export

10
推荐指数
1
解决办法
2626
查看次数

模板类中的模板方法专门化

我需要(想要)专门化模板类中的方法,只允许某些基本类型.(这不是一个重复的问题,这个)

好吧,我有这个课程:

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

c++ templates specialization

5
推荐指数
1
解决办法
561
查看次数

c ++从<<重载获取流修饰符

我像这样重载了流插入运算符:

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

如果我也可以使用该语言环境(为数千个提取分隔符),那么第二个参数也会有所帮助......

那可能吗 ?

c++ overloading stream

3
推荐指数
1
解决办法
146
查看次数

将二进制字符串转换为整数字符串c ++

可能重复:
将1s和0s的字符串转换为二进制值

我想将二进制字符串转换为c ++中的整数字符串.例如:

"000000000010""2"

我有以下约束:我不能将此字符串转换为整数类型,然后再将其转换为字符串,因为该二进制字符串可能非常大!

我已经尝试过这样做,用stringstream标志插入二进制字符串std::stringstream::binary然后使用std::dec标志输出内容,但它不起作用

谢谢大家.

c++ string binary decimal

0
推荐指数
1
解决办法
7829
查看次数