Boost logo

Boost Users :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-10-11 07:16:50


Robert Ramey wrote:

>> template<class T>
>> class any_value_holder
>> {
>> static boost::proably_not_yet_written::serialization_register<
>> any_value_holder<T> > register_it;
>> };
>>
>> Is it possible to make this work?
>
> I think you would also need to explicitly instantiate it for each type.
> Which puts us back to square one of having to specify the types ahead of
> time.

With some cooperation from boost::any, this is not necessary:

  template<class T>
  class any_holder
  {
  public:
      any_holder()
      {
          &registrator_;
      }

  private:
      static registrator<T> registrator_;

  };

will run constructor of 'registrator_' while generating no code in
any_holder's constructor. Complete example attached.

> Its possible that progress could be made here, but I think it would be
> pretty tricky. Here are some off hand ideas.
>
> It seems to me that boost::any is a basically a wrapper around a pointer
> to
> a type ValueType. If ValueType is exported it would possible to make
> things work. However, boost::any public interface doesn't expose enough
> of
> its public interface to make it serializable. So if one wanted to do this
> he would have to do one of the following:
>
> a) make some private variables public
> b) add some functions to expose required implementation features

Namely? boost::any already has

    const std::type_info & type() const;

method and if it can be used to implement non-intrusive serialization, this
will be great.

- Volodya




Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net