[osg-users] Meta-data in core OSG - project started

Peter Amstutz peter.amstutz at tseboston.com
Mon Apr 18 08:15:24 PDT 2011

You could use an implicit constructor, e.g.

template<typename T>
class Value {
  Value(const Value<T>&);

class Value<int>;

void addMeta(const std::string&, const Value<T>& v) {
  Value<T>* localcopy = new Value<T>(v);

so the function call:

addMeta("myMeta", 5);

is implicitly converted to:

addMeta(std::string("myMeta"), Value<int>(5));

Two considerations:
 - There is some copying involved, which might be undesirable for large
arrays.  C++ 2011 move constructors are intended to solve this problem
in general, but it's unlikely that OSG compatibility requirements will
allow the use of C++ 2011 features for a while.

 - The way it is described here, any customization for Value<T> must
occur through template specialization, rather than subclassing.  To
support subclassing, use a clone() method instead of new Value<T>(v).

On a related note, my preference would be for the Value<T> class to be
immutable so that you are required to set metadata values through the
API rather than poking  Value<T> objects directly.  This is necessary if
you want to support alternate backing stores which don't use Value<T>
objects in the backend at all.

- Peter

On 4/15/2011 11:10 AM, Sukender wrote:
> Hi Peter,
> Thanks... but what for the addMeta<T>()?
> I mean it's okay having a addMeta(string, ValueBase *), but this will force you to write
>     o->addMeta( "myMeta", new Value<int>(5) );
> instead of simply
>     o->addMeta( "myMeta", 5 );
> which could be nice. Any idea?
> Sukender
> PVLE - Lightweight cross-platform game engine - http://pvle.sourceforge.net/
Peter Amstutz
Senior Software Engineer
Technology Solutions Experts
Natick, MA

More information about the osg-users mailing list