返回首页

{A}快速使用指南
使用STL序列化库(STL - SL的)是一个过程分为三个步骤。第一步,你声明你要序列化使用STL - SL的STL的类型。

value_trait < int > int_filer;

value_trait < std::list< bool > > bool_list_filer;

value_trait < std::map<std::string, std::multimap< float, bool > > > complex_stl_filer;

在代码段,三个不同类型的声明。每种类型都有不同程度的复杂性。 int_filer是所有最简单的,其中一个int参数的value_trait模板类。 int_filer因此,可以使用序列化和负载从序列化文件的INT。
同样,bool_list_filer声明准备序列化BOOL类型的列表。而complex_stl_filer准备的字符串和multimap数据类型multimap中持有浮动,BOOL对如上所示的地图。
在接下来的步骤,创建一个file_interface需要一个序列化的文件名序列化的数据将被写入或读从的。{C}
注意,file_interface并不需要在声明的类型,这意味着不同类型的STL对象,可在相同的序列化文件的序列化。
此外,因为序列化文件的接口声明是不相关的数据文件的声明,上述两个步骤可能需要对方的地方。
在第三和最后阶段,数据序列化到文件或从它装载。
filer.serialize ( stl_object, file_interface );



filer.load ( stl_object, file_interface );

下面的代码片断演示了使用上面描述的所有三个步骤:
//declare serialization-file interfaces

stl_trait_writer file_interface ( ".\\serialization-file.txt");



//declare the STL object 

std::vector < int > stl_object;





//declare the data filer 

value_trait < std::vector < int > > data_filer;





//...populate data in stl_object...// 

//serialize data in stl_object in the file pointed by file_interface

data_filer.serialize ( stl_object, file_interface );



//-- or --//



//load data in the file pointed by file_interface in stl_object STL object

data_filer.load ( stl_object, file_interface );

//...use data in stl_object...//
STL序列化库
本文介绍了模板类的序列化用户定义的文件格式(默认情况下,文本文件)的STL对象。
STL序列化库是由两个主要部分:序列化Filer和序列化模板类组成。序列化的文件管理器
这包括以下三类:
//Serialization-file writer class.

//This guy writes the data to the file specified by 'file_path'.

//NOTE: This class does not recognize the data objects containing spaces, tabs, 

// new-line characters in them. This may be fixed by overloading '<<' operator and 

// adding escape-sequencing logic in it.

class stl_trait_writer: public std::ofstream

{

public:

      stl_trait_writer(const std::string& file_path):std::ofstream(file_path.c_str())

      {}

};



//Serialization-file reader class.

//This guy reads the data from the file specified by 'file_path'.

//NOTE: This class does not recognize the data objects containing spaces, tabs, 

// new-line characters in them. This may be fixed by overloading '>>' operator and 

// adding escape-sequencing logic in it.

class file_trait_reader: public std::ifstream

{

public:

      file_trait_reader(const std::string& file_path):std::ifstream(file_path.c_str())

      {}

};



//Serialization filer class.

//This guy presents the set of reader, writer objects responsible for reading and 

// writing to the serialization file.

template <class writer_trait , class reader_trait>

class filer_trait

{

public:

      typedef typename writer_trait writer_type;

      typedef typename reader_trait reader_type;

};

stl_trait_writer和file_trait_reader类提供了基本的文件I / O机制。 filer_trait类是一个文件管理器,只有对上述两种类类型。另一种方法可能filer_trait类实现文件的I / O的可扩展性的成本的简单机制。
文件作家类(stl_trait_writer)可能与用户级改变的序列化文件格式,例如XML取代。加载文件(file_trait_writer)序列化数据提供一个文件阅读器类,一类能够了解用户的文件格式将不得不改变。序列化的模板类
在本模块中的类,包括打破复杂的STL类型分为基本类型和序列化/反序列化的基本数据类型的语言机制。
//Basic datatype serializer class.

//Triggers the read or write to the serialization file for the basic datatypes.

//NOTE: This class has been tweaked to work with the 'stl_trait_writer' class.

template <class val_trait, class val_filer_trait = 

              filer_trait<stl_trait_writer, file_trait_reader> >

class value_trait

{

public:

      typedef typename val_filer_trait::writer_type writer_trait;

      typedef typename val_filer_trait::reader_type reader_trait;



      void serialize(const val_trait& val, writer_trait &pen)

      {

            pen << val << "\n"; //a tweak for 'stl_trait_writer' class defined above.

            //pen << val; //correct code, this should replace above line of code should

                          //you choose to implement your own 'stl_trait_writer' class.



            pen.flush();

      }



      void load(val_trait& val, reader_trait &pen)

      {

            pen >> val;

      }

};

value_trait类是负责序列化和加载基本数据类型。上面的代码调整,与上一节中所描述的序列化文件管理器类。
下面的摘录说明分解成其原始成分下降复杂的STL类型的代码。
//Sequence-list datatype serializer class.

//Triggers the read or write to the serialization file for the Sequence-list datatypes.

//This class takes care of STL types -- list, vector, stack, queue, deque

// and priority_queue

//NOTE: 'basic_string' type is not treated as sequence-list, but as basic type.

template <class sequence_list_type, class val_filer_trait >

class sequence_list_value_trait

{

public:

      typedef typename val_filer_trait::writer_type writer_trait;

      typedef typename val_filer_trait::reader_type reader_trait;



      typedef typename sequence_list_type::size_type size_type;   

      typedef typename sequence_list_type::value_type value_type;



      void serialize (sequence_list_type& val, writer_trait &pen )

      {

            value_trait<size_type, val_filer_trait> size_filer;

            size_filer.serialize (val.size(), pen);



            for(sequence_list_type::iterator i=val.begin(); i != val.end(); i++)

            {

                  value_trait<value_type, val_filer_trait> val_trait_key_filer;



                  val_trait_key_filer.serialize(*i,pen);

            }

      }



      void load (sequence_list_type& val, reader_trait &pen )

      {

            value_trait<size_type, val_filer_trait> size_reader;

            size_type val_size=0;

            size_reader.load(val_size, pen);



            for(; val_size > 0; val_size--)

            {

                  value_type element;



                  value_trait<value_type, val_filer_trait> val_trait_key_reader;



                  val_trait_key_reader.load(element, pen);



                  val.push_back(element);

            }

      }

};

sequence_list_value_trait类分解列表,向量,栈,队列,双端队列,和priority_queue STL类型更细小的组件类型。因此,一个int类型的载体,将被分解成一个int类型的默认向量的迭代序列的列表::iterator类型。和int类型的值序列化的value_trait类。
//Triggers the read or write to the serialization file for the Associative-list

// datatypes.

//This class takes care of STL types -- map, multimap, set, multiset

template <class associative_list_type, class val_filer_trait >

class associative_list_value_trait

{

public:



      typedef typename val_filer_trait::writer_type writer_trait;

      typedef typename val_filer_trait::reader_type reader_trait;



      typedef typename associative_list_type::size_type size_type;

      typedef typename associative_list_type::key_type key_type;

      typedef typename associative_list_type::mapped_type data_type;



      void serialize (associative_list_type& val, writer_trait &pen )

      {

            value_trait<size_type, val_filer_trait> size_filer;

            size_filer.serialize (val.size(), pen);



            for(associative_list_type::iterator i=val.begin(); i != val.end(); i++)

            {

                  value_trait<key_type, val_filer_trait> val_trait_key_filer;

                  value_trait<data_type, val_filer_trait> val_trait_data_filer;





                  val_trait_key_filer.serialize(i->first,pen);

                  val_trait_data_filer.serialize(i->second,pen);

            }

      }



      void load (associative_list_type& val, reader_trait &pen )

      {

            value_trait<size_type, val_filer_trait> size_reader;

            size_type val_size=0;

            size_reader.load(val_size, pen);



            for(; val_size > 0; val_size--)

            {

                  key_type key_element;

                  value_trait<key_type, val_filer_trait> val_trait_key_reader;

                  val_trait_key_reader.load(key_element, pen);



                  data_type data_element;

                  value_trait<data_type, val_filer_trait> val_trait_data_reader;

                  val_trait_data_reader.load(data_element, pen);



                  val.insert (std::pair<key_type, data_type> (key_element, data_element));

            }

      }

};

associative_list_value_trait类是一个复杂的版本,在地图上,multimap中,设置和multiset的STL类型分解到他们的关键数据元素类型和进一步细分根据需要,或序列化的sequence_list_value_trait类。
以下提取描绘了一个复杂的STL类型的启动故障的过程中,使用支付上述associative_list_value_trait和sequence_list_value_trait类的机制。
//STL vector datatype serializer class.

//Triggers the read or write to the serialization file for the STL vector datatype.

template <class val_trait_key, class val_trait_data, class val_filer_trait  > 

class value_trait< std::vector<val_trait_key, val_trait_data> , val_filer_trait  >

{

public:



      typedef typename val_filer_trait::writer_type writer_trait;

      typedef typename val_filer_trait::reader_type reader_trait;



      typedef std::vector<val_trait_key, val_trait_data> vector_value_trait;



      void serialize (vector_value_trait& val, writer_trait &pen )

      {

            sequence_list_value_trait<vector_value_trait, 

                     val_filer_trait> sequence_list_value_filer;

            

            sequence_list_value_filer.serialize (val, pen);

      }



      void load (vector_value_trait& val, reader_trait &pen )

      {



            sequence_list_value_trait<vector_value_trait, 

                     val_filer_trait> sequence_list_value_reader;



            sequence_list_value_reader.load (val, pen);

      }

};

上面的代码段初始化向量STL类型解散进一步序列化的颗粒组成部分。类似的逻辑实现列表,栈,队列,双端队列,和priority_queue STL类型。
//STL multimap datatype serializer class.

//Triggers the read or write to the serialization file for the STL multimap datatype .

template <class val_trait_key, class val_trait_data, class val_filer_trait  > 

class value_trait< std::multimap<val_trait_key, val_trait_data> , val_filer_trait  > 

{

public:



      typedef typename val_filer_trait::writer_type writer_trait;

      typedef typename val_filer_trait::reader_type reader_trait;



      typedef std::multimap<val_trait_key, val_trait_data> multimap_value_trait;



      void serialize (multimap_value_trait& val, writer_trait &pen )

      {



            associative_list_value_trait<multimap_value_trait, 

                        val_filer_trait> associative_list_value_filer;



            associative_list_value_filer.serialize (val, pen);

      }



      void load (multimap_value_trait& val, reader_trait &pen )

      {



            associative_list_value_trait<multimap_value_trait, 

                        val_filer_trait> associative_list_value_reader;



            associative_list_value_reader.load (val, pen);

      }

};

处理碎片更细的组件向量类型的像上面摘录,这段代码一个multimap中溶解到其键类型和数据类型为进一步序列化组件。类似的逻辑可能是其他关联容器,如地图,设置和multiset的实施。评论
应该指出的是,上述库STL中的文件管理器声明的类创建一个每分型。虽然这个剂量没有考虑任何额外的运行时间超过头,命名空间中的序列化的类的数量增加一倍。如果类数超过你的编译器的支持,您可能要重新因素的类层次结构。
以上的事实可能会被视为处于劣势,但应该指出的是,类计数,不施加任何在运行时的开销。它的优点是,STL - SL的代码是类型安全的。
这里介绍的STL - SL的是第一次修订,你可能要包括正在序列化序列化文件中关于STL类型的类型信息,从而帮助在STL - SL的运行时类型检查。
的其他图书馆提供的是更强大,但可以说不一定直观。这些库解决了许多其他问题,如类版本,指针恢复和数据的可移植性。这篇文章的目的不是取代它们;本条应作为一个轻量级的,易于使用的替代品。此外,这里介绍的代码可以被视为一个STL序列化引擎,甚至,更全面地实施一个序列化库。

回答

评论会员:Maruthuj 时间:2011/12/07
我有常用的数据类型和另一个结构数据类型的结构(appinfo的)。数appinfo的结构被添加在列表中,并有serilize。让我知道是否有可能与此库serilize
评论会员:Bing168888 时间:2011/12/07
对于一组数据:STD:setlt; CMyTypegt;,我得到一个编译错误

不能转换错误1错误C2664:"value_trait:负荷":从"__w64无符号整型"CMyType d参数1:\工作区\ stl_sl.h 190

它指向

模板LT;类sequence_list_type类val_filer_trait GT;
类sequence_list_value_trait
{
......{ BR}
无效load_set(sequence_list_typeamp VAL,reader_trait放大器;笔)
{
value_traitlt; value_type的,val_filer_traitgt; size_reader;
size_type val_size = 0; ---- GT; size_reader.load(val_size笔);
...............{ BR} }
}
这是在VS2005中,我已经实现了运营商LT,LT和GT,GT; CMyType

请帮助
评论会员:sharkwatch 时间:2011/12/07
您好,

我尝试使用以下类型库:
性病::地图>

生成以下错误:
C:\文件和设置\瓦尔特\我的文档\ Visual Studio 2005中\项目\直勾勾发动机\ stlsl.h(98):错误C2039:"mapped_type":是不是一个成员的"性病:设置\对象共享引擎"

当我修改了示例代码:
性病::地图>>
:
性病::地图>>

我得到了同样的错误。

有什么想法?
评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
问候,

感谢挖这个错误! 运行这个错误,因为没有mapped_type STL familiy关联列表对象定义的成员。
STD:设置发生是一个顺序列表中的一种。我对不起我的错误。
以下变化快速的解决方法应让你的工作做好。

但我认为在STL - SL的设计一些重新工作。我想出了一个更好的,简单的模型,但我心甘情愿地等待一段时间把副本优化...
修复作为一项修正案(修复),除了在代码(解决方法)。
更改#1 / / STL集合数据类型的序列化器类。/ /触发器的读或写STL的设置数据类型的序列化文件。
模板
类value_trait,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::设置set_value_trait;

无效序列(set_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(set_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load_set(VAL,钢笔);}
}
更改#2
模板类中添加下面的方法模板
类sequence_list_value_trait {...}{ BR}
无效load_set(sequence_list_type VAL,reader_trait笔)
{
value_trait size_reader;
size_type val_size = 0;
size_reader.load(val_size笔);

为(val_size> 0; val_size - )
{
value_type的元素;
value_trait val_trait_key_reader; val_trait_key_reader.load(元素,钢笔);
val.insert(元);}
}
我的作品,也应该为你工作..

祝你好运..!

AJ
评论会员:Kikoa 时间:2011/12/07
我同样的问题(比2003年)。 stlsl.h修改建议:
/ / stlsl.h:声明和定义的STL序列Libray(STL - SL的)模板类
。/ /作者:Aniruddha贾扬Jahagirdar(ajDOTsubscribeAT的RATEgmailFULL - STOPcom)
/ /日期:2006年10月2日,
/ /修订:0.1

/ /需要STL - SL的类

#包括<地图>







/ /需要"stl_trait_writer"和"file_trait_reader"

/ /序列化文件Writer类。
/ /这家伙将数据写入"FILE_PATH指定的文件。
/ /注意:这个类没有recoginse数据对象包含空格,制表符,换行符
/ /在他们的本地字符。这可能是固定超载"LT,LT,"经营者加入
/ /逃生测序逻辑。
类stl_trait_writer:公众的std::ofstream
{
市民:

stl_trait_writer(常量的std::字符串FILE_PATH):STD:ofstream(file_path.c_str())
{

}
}

/ /序列化文件阅读器类。
/ /这家伙从文件中读取指定的数据由"FILE_PATH"。
/ /注意:这个类没有recoginse数据对象包含空格,制表符,换行符
/ /在他们的本地字符。这可能是固定的,通过重载">>"操作符和加入
/ /逃生测序逻辑。
类file_trait_reader:公众的std::ifstream的
{
市民:

file_trait_reader(STD常量:字符串FILE_PATH):STD:ifstream的(file_path.c_str())
{

}
}

/ /序列化的文件管理器类。 / /这家伙介绍的读者,作家负责阅读和写作的对象/ /序列化文件。
模板
类filer_trait
市民:

的typedef typename的writer_trait writer_type;
的typedef typename的reader_trait reader_type;
}

/ /基本数据类型的序列化器类。 / /触发读取或写入的基本数据类型的序列化文件。/ /注意:这个类别已被调整工作"stl_trait_writer"类
。模板>
类value_trait
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::设置set_value_trait;

无效序列(set_value_trait VAL,writer_trait笔)
{
sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(set_value_trait VAL,reader_trait笔)
{
sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load_set(VAL,钢笔);}
/ *无效序列(常量val_trait值,writer_trait笔){
笔LT,LT; VAL LT,LT;的"\ n"; / /调整"stl_trait_writer"类上面定义的
。/ /笔LT,LT; VAL; / /正确的代码,这应该取代上述行代码,你应该impliment自己的"stl_trait_writer"类
pen.flush()
}

无效负载(val_trait VAL,reader_trait笔)
{
笔>> VAL
}
* /

}

/ /关联列表的数据类型序列化器类。 / /触发读或写联想列表数据类型的序列化文件。/ /这个类需要照顾的STL类型 - 地图,multimap中,设置多重集
模板
类associative_list_value_trait
{
市民:
的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef typename的associative_list_type:size_type size_type;
的typedef typename的associative_list_type:key_type key_type;
的typedef typename的associative_list_type:mapped_type DATA_TYPE;

无效序列(associative_list_type VAL,writer_trait笔)
{
value_trait size_filer;
size_filer.serialize(val.size(),PEN)

(associative_list_type:!迭代I = val.begin(); I = val.end();我)
{
value_trait val_trait_key_filer;
value_trait val_trait_data_filer;
val_trait_key_filer.serialize(I ->第一,钢笔);
val_trait_data_filer.serialize(I ->第二,钢笔);}
}

无效负载(associative_list_type VAL,reader_trait笔)
{
value_trait size_reader;
size_type val_size = 0;
size_reader.load(val_size笔);

为(val_size> 0; val_size - )
{
key_type key_element;
value_trait val_trait_key_reader;
val_trait_key_reader.load(key_element笔);

DATA_TYPE data_element;
value_trait val_trait_data_reader;
val_trait_data_reader.load(data_element笔);
val.insert(STD:对(key_element,data_element));}

}
}

/ /序列列表的数据类型序列化器类。 / /触发的序列列表中的数据类型的序列化文件读或写。/ /这个类需要照顾的STL类型 - 列表,向量,栈,队列,双端队列,priority_queue / /注意:"basic_string的"类型不序列列表处理这implimentation模板
类sequence_list_value_trait
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef typename的sequence_list_type:size_type size_type;
的typedef typename的sequence_list_type:value_type的value_type的;

无效序列(sequence_list_type VAL,writer_trait笔)
{
value_trait size_filer;
size_filer.serialize(val.size(),PEN)

(sequence_list_type:!迭代I = val.begin(); I = val.end();我)
{
value_trait val_trait_key_filer;
val_trait_key_filer.serialize(*我,笔)

/ /调查:在这里,STL中的顺序列出implimentation -
/ /从我的感觉,这是"下一个节点的指针"interal链表
/ / value_trait val_trait_data_filer;
}
}

无效负载(sequence_list_type VAL,reader_trait笔)
{
value_trait size_reader;
size_type val_size = 0;
size_reader.load(val_size笔);
为(val_size> 0; val_size - )
{
value_type的元素;
value_trait val_trait_key_reader; val_trait_key_reader.load(元素,钢笔);val.push_back(元素);
}
}

无效load_set(sequence_list_type VAL,reader_trait笔)
{
value_trait size_reader;
size_type val_size = 0;
size_reader.load(val_size笔);

为(val_size> 0; val_size - )
{
value_type的元素;
value_trait val_trait_key_reader; val_trait_key_reader.load(元素,钢笔);
val.insert(元);}
}
}

/ / STL的地图数据类型的序列化器类。
/ /触发器的读或写STL的地图数据类型的序列化文件。
模板
类value_trait <性病::地图,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::地图map_value_trait;

无效序列(map_value_trait VAL,writer_trait笔)
{

associative_list_value_traitlt; map_value_trait,val_filer_trait> associative_list_value_filer;
associative_list_value_filer.serialize(VAL,钢笔);}

无效负载(map_value_trait VAL,reader_trait笔)
{

associative_list_value_traitlt; map_value_trait,val_filer_trait> associative_list_value_reader;
associative_list_value_reader.load(VAL,钢笔);}
}
/ / STL multimap中的数据类型的序列化器类。BR}/ /触发器的读或写STL multimap中的数据类型的序列化文件。
模板
类value_trait <性病::multimap中,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::multimap中multimap_value_trait;

无效序列(multimap_value_trait VAL,writer_trait笔)
{

associative_list_value_trait associative_list_value_filer;
associative_list_value_filer.serialize(VAL,钢笔);
无效负载(multimap_value_trait VAL,reader_trait笔)
{

associative_list_value_trait associative_list_value_reader;
associative_list_value_reader.load(VAL,钢笔);}
}
/ / STL集合数据类型的序列化器类。/ /触发器的读或写STL的设置数据类型的序列化文件。
模板
类value_trait,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::设置set_value_trait;

无效序列(set_value_trait VAL,writer_trait笔)
{

associative_list_value_trait associative_list_value_filer;
associative_list_value_filer.serialize(VAL,钢笔);}

无效负载(set_value_trait VAL,reader_trait笔)
{

associative_list_value_trait associative_list_value_reader;
associative_list_value_reader.load(VAL,钢笔);}
}

/ / STL的multiset的数据类型的序列化器类。
/ /触发器的读或写STL multiset的数据类型的序列化文件。
模板
类value_trait <性病::multiset的,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;
的typedef的std::multiset的multiset_value_trait;

无效序列(multiset_value_trait VAL,writer_trait笔)
{

associative_list_value_trait associative_list_value_filer;
associative_list_value_filer.serialize(VAL,钢笔);}

无效负载(multiset_value_trait VAL,reader_trait笔)
{

associative_list_value_trait associative_list_value_reader;
associative_list_value_reader.load(VAL,钢笔);}
}
/ / STL的列表数据类型的序列化器类。 / /触发STL列表数据类型的序列化文件读或写。模板
类value_trait <性病:列表,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::列表list_value_trait;

无效序列(list_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(list_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔);}
}

/ / STL的vector数据类型的序列化器类。BR}/ /触发器的读或写STL的vector数据类型的序列化文件。
模板
类value_trait <性病::向量,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::向量vector_value_trait;

无效序列(vector_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(vector_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔); }
}
/ / STL堆栈的数据类型的序列化器类。/ /触发器的读或写STL堆栈数据类型的序列化文件。
模板
类value_trait <性病:堆栈,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::堆栈stack_value_trait;

无效序列(stack_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(stack_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔);}
}
/ / STL队列中的数据类型的序列化器类。
/ /触发STL的队列数据类型的序列化文件读或写。模板
类value_trait <性病:队列,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::队列queue_value_trait;

无效序列(queue_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(queue_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔);}
}

/ / STL的deque的数据类型的序列化器类。
/ /触发器的读或写STL的deque的数据类型的序列化文件。
模板
类value_trait <性病::deque的,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::deque的deque_value_trait;

无效序列(deque_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(deque_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔);}
}

/ / STL的priority_queue数据类型的序列化器类。
/ /触发器的读或写STL的priority_queue数据类型的序列化文件。
模板
类value_trait <性病::priority_queue,val_filer_trait>
{
市民:

的typedef typename的val_filer_trait:writer_type writer_trait;
的typedef typename的val_filer_trait:reader_type reader_trait;

的typedef的std::priority_queue priority_queue_value_trait;

无效序列(priority_queue_value_trait VAL,writer_trait笔)
{

sequence_list_value_trait sequence_list_value_filer;
sequence_list_value_filer.serialize(VAL,钢笔);}

无效负载(priority_queue_value_trait VAL,reader_trait笔)
{

sequence_list_value_trait sequence_list_value_reader;
sequence_list_value_reader.load(VAL,钢笔);}
}


评论会员:henryleesd 时间:2011/12/07
红帽的Fedora Linux框与G,我试着编译示例代码,但它没有工作。这里的错误讯息。任何固定的想法?
谢谢!

[SL4 @蜂房STL - SL] $
g - Wall来- G - C - O stlsl example.o stlsl example.cpp
文件中包括来自stlsl example.cpp:11:
stlsl.h:58:错误:前预计嵌套名称规范"writer_trait"
stlsl.h:58:错误:`writer_trait'不姓类型
stlsl.h:59:错误:前预计嵌套名称规范"reader_trait"
stlsl.h:59:错误:`reader_trait"不姓类型
stlsl.h:在成员函数'无效associative_list_value_trait:序列(associative_list_type,TYPENAME val_filer_trait::writer_type)":
预计stlsl.h:105:错误:';'前的"i"
stlsl.h:105:错误:`我不是在此范围内
声明stlsl.h:在成员函数'无效sequence_list_value_trait:序列(sequence_list_type,TYPENAME val_filer_trait::writer_type)":
预计stlsl.h:157:错误:';'前的"i"
stlsl.h:157:错误:`我不是在此范围内
声明stlsl.h:在全局范围内:
stlsl.h:`value_trait>,性病的实例:少,性病:分配器>>>>,性病:少,性病:分配器,性病:少,性病:分配器>>>>> >>,filer_trait>":
stlsl example.cpp:41:从这里实例化
stlsl.h:191:错误:没有类型,名为`writer_type"类filer_trait'
stlsl.h:192:错误:没有类型,名为`reader_type"类filer_trait'
stlsl.h:197:错误:没有类型,名为`writer_type"类filer_trait'
stlsl.h:205:错误:没有类型,名为`reader_type"类filer_trait'
stlsl example.cpp:在函数INT主要()':{ BR}stlsl - example.cpp:66:错误:"类v​​alue_trait,性病:少,性病:分配器>>>>,性病:少,性病:分配器,性病:少,性病:分配器> >>>>>>,filer_trait>'没有成员命名"序列"
stlsl example.cpp:77:错误:"类v​​alue_trait,性病:少,性病:分配器>>>>,性病:少,性病:分配器,性病:少,性病:分配器> >>>>>>,filer_trait>'没有成员命名的"负荷"
使:*** [stlsl example.o]错误1

评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
对不起哥们,havent发现时间(Linux中)一起把这个代码工作GCC ..
评论会员:GHop 时间:2011/12/07
Aniruddha,
你不介意一个VC的6.0版本吗?感谢


- G
评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
您好,对不起,延迟的答复..
我想我可能会发现一段时间,很快就得到这件事很快在所有的编译器工作..
我知道它几乎是今年以来您发布的,但我想我可以责怪我谋生的工作{S0}
祝你好运!
评论会员:Anonymuos 时间:2011/12/07
注:这篇文章是所有升压球迷,下面的
这件事,使我在C的世界拼图,重做的东西几乎是很快的火焰。
你写的东西有人醒来说:"已经做了吗??不管"怎么样??和"什么??
升压有很多球迷,我明白了。但它是难以置信的动机,使每一个程序员被字面意思是"关闭??定义一个方法时,算法"已经​​在Boost??
一个是不是可信的做法说"如果你写的是已经完成的其他地方,它是很好的告知和解释的区别??
是的,这是不错,但不管你写的心脏,除非你所说的东西完全陌生的,肯定是从别的地方做。但是,没有人可以检查世界看到任何有关任何实施的差异。
所以,亲爱的升压球迷,它将会更好,如果你先开始,下一次你说:"提高做??真正解释这些差异。可能你就会明白一些东西。
请停止"已经测试??一连串。
没有开始为"测试??"已经测试??是不够的问别人安装了小鼠问题的大象。一个2.5KB的代码片段的正确性,可以在几分钟内得到证实。的100时间较大的图书馆之一... ...但是你有很多同行,从来就不知道。其中的原因之一就是... ...同行以及由此产生的熵的巨大的数字。希望你知道它是什么。
但我真的不明白,为什么你读了这些文章。 ,如果你认为提升你需要的一切,用它享受,不麻烦了世界各地。或解释世界的技术差异。


2错误。>编译... 65534错误。
评论会员:斯蒂芬休伊特 时间:2011/12/07
emilio_grv写道:这件事,使我在C的世界拼图,重做的东西几乎是很快的火焰。你写的东西有人醒来说:"已经做了吗??不管"怎么样??和"什么??升压有很多球迷,我明白了。但它是难以置信的动机,使每一个程序员被字面意思是"关闭??定义一个方法时,算法"已经​​在Boost??

掌声,掌声!

emilio_grv写道:所以,亲爱的升压球迷,它将会更好,如果你先开始,下一次你说"做升压真正解释的差异呢??。可能你就会明白一些东西。

你认为升压球迷理解升压足以解释技术上的差异呢? {S0}
评论会员:yafan 时间:2011/12/07
五月utopistic,但我喜欢把提高没有写自己... ... {五}
所以至少有一个可能会。

2错误。>编译...

65534错误。
评论会员:Anonymuos 时间:2011/12/07
有这个问题上的点的数量。首先是,其目的是教育,而不是再灌输的文章,它似乎是一个好主意,告知他们的选择读者。对我有写的东西自己没有,这是一个很好的方式来学习计算机编程插件和奏。这就是说,我有足够的经验,在贸易,十分之九的时间,当你这样的本土解决一个问题,解决的许多不同的人多次,做正确的事,当你知道"已经得到它的工作是扔在垃圾桶您的代码,并使用关闭自我实现。这通常是一个双赢的局面;你写它的好处,但你可以使用一个组,投入更多的时间写了一个实现,金钱和人的力量,然后是本地。

史蒂夫
评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
,你说得对,但可能是我10 1你谈过

斯蒂芬休伊特写道:这说,我有足够的经验,在贸易知道,十分之九的时间,当你这样的家庭成长的解决方案,到一个已经解决了许多不同的人多次的问题,正确的事情做当你得到它的工作是扔在垃圾桶您的代码,并使用关闭自我实现。这通常是一个双赢的局面;

你必须在一般也考虑这几点:
寻求现有的执行花费的时间"学习曲线??你该实现?"DIS适应它与您的设计功能,包括和你并不需要和缺少的功能,你必须要解决。
有很多问题本身那么简单,编写和测试自己的代码内所有的东西比更有效率。除非问题太笼统,你能想到一次永远解决它。

,我的经验与提高是,它总是有更多的东西,缺了点什么,和适应工作是最差的,避免它。
有时我的感觉,作者要显示他们的智力吹起来的功能,而不是做一个正确的模块化

一般来说,确定以了解可能的选择,但至少理性和比较,而不是一个"已经做了吗??没有作出任何解释的情况下(听起来像"关,神圣的SH * T??像大多是每时间提高球迷们,应该在最低限度。




2错误。>编译... 65534错误。
评论会员:斯蒂芬休伊特 时间:2011/12/07
尼斯的工作。好的代码。

欢呼声,

- Y
评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
!yafan写道:lready完成 - 升压序列库
尼斯的工作。好的代码。



评论会员:斯蒂芬休伊特 时间:2011/12/07
不错的列表中的,它已经完成在X,为什么你的方法是不同的/比方法在X最后修改文章:周一10月09日12时53分30秒2006年 - -
评论会员:约翰Gerell 时间:2011/12/07
感谢,我会做rightaway!
评论会员:游客 时间:2011/12/07
AniruddhaJahagirdar
所以,现在人都得到了一个额外的选择哑屁股。给予的记载,广泛用于同行评审,这不是我知道我会选择的库之间的选择。

史蒂夫