polyJsonBase.h
1 /*
2  @copyright Russell Standish 2000-2013
3  @author Russell Standish
4  This file is part of Classdesc
5 
6  Open source licensed under the MIT license. See LICENSE for details.
7 */
8 
9 #ifndef POLYJSONBASE_H
10 #define POLYJSONBASE_H
11 
12 
13 namespace classdesc
14 {
15  struct PolyJsonBase
16  {
17  virtual void json_pack(json_pack_t&, const string&) const=0;
18  virtual void json_unpack(json_unpack_t&, const string&)=0;
19  virtual ~PolyJsonBase() {}
20  };
21 
22  template <class T>
23  struct PolyJson: virtual public PolyJsonBase
24  {
25  void json_pack(json_pack_t& x, const string& d) const
26  {::json_pack(x,d,dynamic_cast<const T&>(*this));}
27 
28  void json_unpack(json_unpack_t& x, const string& d)
29  {::json_unpack(x,d,static_cast<T&>(*this));}
30 
31  };
32 
33  template <> struct tn<PolyJsonBase>
34  {
35  static std::string name()
36  {return "classdesc::PolyJsonBase";}
37  };
38  template <class T> struct tn<PolyJson<T> >
39  {
40  static std::string name()
41  {return "classdesc::PolyJson<"+typeName<T>()+">";}
42  };
43 }
44 
45 #endif
46 
Definition: json_pack_base.h:43
void json_pack(json_pack_t &o, const string &d, T &a)
forward declare generic json operations
Definition: json_pack_epilogue.h:53
Definition: polyJsonBase.h:23
Definition: classdesc.h:375
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
Definition: polyJsonBase.h:15