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"

This commit is contained in:
Robert Osfield
2011-07-15 09:48:12 +00:00
parent 9529b14f3c
commit b970343c47

View File

@@ -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<T>::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<const TemplateValueObject*>(obj)!=NULL; }
virtual const char* libraryName() const { return "osg"; }
virtual const char* className() const { return ValueObjectClassNameTrait<T>::s_className; }
virtual const char* className() const { return ValueObjectClassNameTrait<T>::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<TYPE> { static const char* s_className; }; \
const char* ValueObjectClassNameTrait<TYPE>::s_className = #NAME; \
template<> struct ValueObjectClassNameTrait<TYPE> { static const char* className() { return #NAME; } }; \
typedef TemplateValueObject<TYPE> NAME;
META_ValueObject(std::string, StringValueObject)