имхо вы тут чего то намудрили, имхо, тут все намного проще:
property.hxx :
#define PROP_ARG( type, val ) private: type val;
#define PROP_SET( type, val, set ) public: void set( type x ){ val = x; }
#define PROP_GET( type, val, get ) public: const type get() const { return( val ); }
#define PROPERTY( type, val, set, get ) \
PROP_ARG( type, val )\
PROP_SET( type, val, set )\
PROP_GET( type, val, get )
myclass.cpp:
#include "property.hxx"
class MyClass {
PROPERTY( int, _valueName, setValue, getValue );
}
....
void testMyClass() {
MyClass obj;
obj.setValue( 5 );
TS_ASSERT_EQUALS( 5, obj.getValue() );
}
дешево и сердито.
по идее можно поразлекаться с автосозданием имен, но заморочно это очень, так как внутри обьекта иногда нужно работать с самой переменной, а не с ее методами , а система имени знать не будет
этот механизм у меня работает на ура, но для сложных типов данных нужно делать дополнитлеьные макросы
PROPERTY_CSTR // ASCIIZ строка
PROPERTY_STR // string
PROPERTY_OBJ //для всех других объектов
минусы такого подхода в том что отладчиком макросы не развернешь
но при корректной реализации это и не требуется
и еще один момент (для тех кто танке) :
про присваимание значения переменной-члену класа напрямую
obj.member = 5;
var = obj.member;
лучше забыть как про страшный сон, и использользовать только методы set/get