Здравствуйте! Освоение C++ пришлось оставить почти на год. И вот, я решил снова поднять незавершённую тему.
В предыдущих примерах мне не нравится вид конструкции
int b=test.prop();
test.prop()=5;
Хочется видеть что-то типа
int b=test.prop;
test.prop=5;
К тому же, это решение неоптимально с точки зрения использования RAM.
Пытаясь исправить эти недостатки, я написал такой код:
class clsTest;
template < class clsParent, class clsType, int(clsTest::*fncSetter)(int), int(clsTest::*fncGetter)() > class clsSetGet
{
friend clsParent;
public:
clsType operator = (clsType p){ return mParent.propSet(p);}
operator clsType() { return mParent.propGet(); }
private:
clsParent & mParent;
clsSetGet(clsParent & parent): mParent(parent) {}
};
class clsTest
{
public:
int propVal;
int propSet(int p){return propVal=p;}
int propGet() {return propVal;}
clsSetGet< clsTest, int, propSet, propGet > prop;
clsTest(): prop(*this), propVal(0) {}
};
int main(int argc, char* argv[])
{
int b;
clsTest test;
test.prop = 7;
b = test.prop;
return 0;
}
Но так как я ещё плохо разобрался с шаблонами, то во-первых, код не работает. А во-вторых, в строке
template < class clsParent, class clsType, int(clsTest::*fncSetter)(int), int(clsTest::*fncGetter)() > class clsSetGet
хочется избавиться от упоминания 'int' и 'clsTest', а в строках
clsType operator = (clsType p){ return mParent.propSet(p);}
operator clsType() { return mParent.propGet(); }
не упоманать 'propSet' и 'propGet'.
Как правильно реализовать этот пример?
Желательно, чтобы в clsSetGet запоминалась бы минимальная информация.