[ROOT] Sending mixed templated/non-templated objects through ROOT I/O

From: Brett Viren (bv@bnl.gov)
Date: Fri Oct 13 2000 - 19:14:05 MEST


Hi.

I have a heterogeneous container which maps (using an STL map) STL
strings to arbitrarily typed values.  I want to be able to send this
container through ROOT I/O.  I have learned how to send simple
templated objects through ROOT I/O, but I can't seem to figure out how
to do it in the case of my container.  

This container is implimented in 3 classes.  The container is called
Registry and it holds values of type (pointer to) RegistryItem.  Each
type T of value is stored in a templated subclass of RegistryItem
called RegistryItemXxx<T>.  These are outlined below:

// The container
class Registry
{
public:
        // non-templated ctor/dtor

        // templated accessors
        template<class T>    T GetVal(string key);
        template<class T> void SetVal(string key, T value);
private:
        map<string, RegistryItem*> fMap;
};


// The generic class which the container holds
class RegistryItem
{
public:
        // non-templated ctor/dtor
        // that's it
};

// The templated class holding a specific typed value
template<class T>
class RegistryItemXxx : public RegistryItem
{
public:
        // templated ctor/dtor

        // templated accessors
          T* Get(void);
        void Set(T* data);
private:
        T* fData;
};


The Registry::GetVal() method uses dynamic_cast<RegistryItemXxx<T>*>()
to turn a generic RegistryItem into the correctly typed version.  This
provides type safe access.


Can any one give me some guidance on how to proceed to get this
container to go through ROOT I/O ?

Thanks,
-Brett.



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:35 MET