From b970343c479e44f4bc2dd6c1cabe91cce4118060 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 15 Jul 2011 09:48:12 +0000 Subject: [PATCH] From Sukender, merged from svn/trunk revision 12690. Fixed compiler error "public: static char const * const osg::ValueObjectClassNameTrait< xxx >::s_className" already defined in xxx.obj" --- include/osg/ValueObject | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/include/osg/ValueObject b/include/osg/ValueObject index 3edbefa8f..4af699756 100644 --- a/include/osg/ValueObject +++ b/include/osg/ValueObject @@ -98,12 +98,9 @@ class ValueObject : public Object template< typename T > struct ValueObjectClassNameTrait { - static const char* s_className; + static const char* className() { return "TemplateValueObject"; } }; -template< typename T > -const char* ValueObjectClassNameTrait::s_className = "TemplateValueObject"; - template< typename T > class TemplateValueObject : public ValueObject @@ -126,7 +123,7 @@ class TemplateValueObject : public ValueObject virtual Object* clone(const CopyOp& copyop) const { return new TemplateValueObject(*this, copyop); } virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast(obj)!=NULL; } virtual const char* libraryName() const { return "osg"; } - virtual const char* className() const { return ValueObjectClassNameTrait::s_className; } + virtual const char* className() const { return ValueObjectClassNameTrait::className(); } void setValue(const T& value) { _value = value; } const T& getValue() const { return _value; } @@ -142,8 +139,7 @@ protected: }; #define META_ValueObject(TYPE,NAME) \ - template<> struct ValueObjectClassNameTrait { static const char* s_className; }; \ - const char* ValueObjectClassNameTrait::s_className = #NAME; \ + template<> struct ValueObjectClassNameTrait { static const char* className() { return #NAME; } }; \ typedef TemplateValueObject NAME; META_ValueObject(std::string, StringValueObject)