草庐IT

序列号

全部标签

c++ - MPL 序列 : is this legal? 的用户定义文字

能够将传递给文字运算符的字符串转换为MPL序列会很有用,因为这样我们就可以根据字符串的内容控制代码生成。以前,我认为这是不可能的,因为constexpr函数的参数在函数体内不被视为常量表达式。但是,我想出了以下在Clang3.4.2和GCC4.8.2下编译的解决方法:#include#include#includestructstring{constuintmax_tm_str[64];constsize_tm_length;templateconstexprstring(constTs...ts):m_str{(uintmax_t)ts...},m_length{sizeof...(

c++ - 如何在 C++ 中创建自定义整数序列

我有这样的功能:templatevoidfoo(constTypes&...values){//expectedthat'values'issequencelike//'1,customvalue1,2,customvalue2,3,...'}第二个函数:templatevoidbar(constTypes&...values){//where'values'areanyvariables//somemagicherefoo((int_seq,values)...);}我想将任何变量序列传递给bar,以便此序列转换为类似'1,value1,2,value2,3,value3'的序列。所

c++ - 传递给 std::for_each 的函数是否允许复制序列元素?

我最近偶然发现了cppreference中的这个措辞:Unliketherestofthealgorithms,for_eachisnotallowedtomakecopiesoftheelementsinthesequenceeveniftheyaretriviallycopyable.这个说法对吗?我没有在标准中找到任何依据。我是否理解得很好,它会顺便说一句。暗示来自同一页面的以下示例无效?structSum{Sum():sum{0}{}voidoperator()(intn){sum+=n;}intsum;};intmain(){std::vectornums{3,4,2,8,1

c++ - 如何访问 valarray 的子序列,将其视为 C++ 中的二维矩阵

我正在学习C++,所以请耐心等待。我有一个std::valarray其中有double元素,我认为它是一个二维矩阵。classMatrix{valarrayelems;intr,c;public:/*type?operator[](intr){return?}*///...}我想重载operator[],这样我就可以得到矩阵的一行,然后,我想要m[r][c]接入运营商。有没有办法得到一行,作为double的序列使用std::slice在valarray,所以如果我改变一个值,它也会在矩阵中改变?我在valarray中读到了这个定义:std::slice_arrayoperator[](

c++ - 易于使用的可扩展序列化/编码?

我对数据结构的序列化有疑问。数据结构的序列化有很多可能性(也称为ma​​rshalling或deflating,参见wiki-article)。每一种编程语言、框架、标准或库似乎都有自己的序列化方法。许多人还定义了自己的数据/接口(interface)描述语言(我更喜欢只在代码内部定义的语言依赖数据结构)。仅举几例(参见wiki-article):COMIDL、CORBAIDL、ThriftIDL、googleProtocolBuffer“.proto”、XSD、ASN.1IDL等。其中一些序列化能够生成语言native数据结构和用于序列化和反序列化这些结构的代码。我对这个问题做了一些

c++ - vector 序列化

我正在尝试对vector数据进行二进制序列化。在下面的这个示例中,我序列化为一个字符串,然后反序列化回一个vector,但没有得到与我开始时相同的数据。为什么会这样?vectorv;v.push_back(1);v.push_back(2);v.push_back(3);strings((char*)(&v[0]),3*sizeof(size_t));vectorw(3);strncpy((char*)(&w[0]),s.c_str(),3*sizeof(size_t));for(size_ti=0;i我希望得到输出123而是获取输出100(在gcc-4.5.1上)

c++ - 如何设计一个可序列化的类,使得任何非序列化的属性都会导致编译时错误?

假设您有以下代码:classA{bool_attribute1;};//Arbitrarilyusingstd::string,notthepointofthisquestionstd::stringserialize(constA&);现在开发者在classA中添加了一个新的bool_attribute2,忘记更新serialize函数,导致运行时出现bug.(已经去过那里了吗?)有没有办法把这个问题变成编译时错误?由于C++不支持反射,我觉得这是不可能的,但我可能遗漏了一些东西。 最佳答案 如果您使用的是c++1z,则可以使用结

c++ - 如何在编译时从两个索引序列创建数组

(剧透-这是一个self回答的问题)假设我有两个索引序列,例如usingi1=std::index_sequence;和usingi2=std::index_sequence;我想制作一个数组(在编译时),其中按顺序包含8个元素:1,2,3,4,5,6,7,8,这样下面的代码就可以工作了(比如,在全局范围内):std::arrayarr=make_array(i1{},i2{});注意:如果我只想要一个序列,解决方案很简单:templateconstexprautomake_arr(std::index_sequence)returnstd::array{Ix...};}但是如果我需要

c++ - 如何序列化共享/弱指针?

我有一个复杂的对象网络,与QSharedPointers和QWeakPointers相连。有没有一种使用Boost.Serialization保存/加载它们的简单方法?到目前为止我有这个:namespaceboost{namespaceserialization{templatevoidsave(Archive&ar,QSharedPointerconst&ptr,unsignedversion){T*sharedPointer=ptr.data();ar&BOOST_SERIALIZATION_NVP(sharedPointer);}templatevoidload(Archive&

c++ - 如何解析存储在文本缓冲区中的整数序列?

在C++中解析由流中的整数序列组成的文本非常简单:只需解码它们即可。当数据以某种方式接收并且在程序中很容易获得时,例如,接收base64编码的文本(解码不是问题),情况有点不同。数据位于程序的缓冲区中,只需要解码,不需要读取。当然,可以使用std::istringstream:std::vectorparse_text(char*begin,char*end){std::istringstreamin(std::string(begin,end));returnstd::vector(std::istream_iterator(in),std::istream_iterator());