Балуюсь с крестами, пробую писать свойства для своих библиотек.
Писал код с мыслью что бы оно генерировало минимум лишних данных, чем страдали "велосипедные реализации" на лямбда выражениях. За ночь вышло что-то такое. Но есть вопрос...
template<class C>
class property : public C
{
public:
property& operator= (decltype(C::n) arg)
{
this->Setter(arg);
return *this;
}
operator decltype(C::n)()
{
return this->Getter();
}
};
class Test
{
protected:
int Getter()
{
std::cout << ("GET\n");
return n;
}
void Setter(int arg)
{
std::cout << ("SET\n");
n = arg;
}
int n;
};
int main()
{
property<Test> x;
x = 10;
std::cout << "Hello World! << "<< x << "\n";
}
Как убрать "int n"? Исходя из дальнейшей идеи я думал что можно взять тип из функции геттера, но при написании "decltype(С::Getter)" и подобных компилятор ругался что так делать нельзя.
А как мне избавится от грёбаннного "int n"???
(Мимо 3:30 "ночи")