у вас проблема с идеей совершенно неверная, я не хотел, чтобы сеттер и геттер не были частью параметров шаблона, я хотел исключить T.
далось создать некоторый класс со всеми вещами, которые мы ожидаем от одного. Я имею в виду, что при его использовании вам не нужно вызывать функции, просто используяoperator =
сделаю всю работу. но есть только одна вещь, я думаю, было бы неплохо, если бы мы могли решить:
template <class T, class X,void (T::*setFunc)(const X&),const X& (T::*getFunc)()const> class property
{
T* const owner;
X data;
friend T;
property(T*const pOwner) : owner (pOwner)
{
}
public:
property& operator = (const X& input){(owner->*setFunc)(input);return *this;}
operator const X&()const {return (owner->*getFunc)();}
};
struct c
{
protected:
void setInt(const int& data);
const int& getInt() const;
public:
c();
property<c, int ,&setInt,&getInt> myInt;
};
c::c() : myInt(this)
{
}
void c::setInt(const int& data)
{
myInt.data = data;
}
const int& c::getInt() const
{
return myInt.data;
}
Свойство see class имеет 4 аргумента, а первым аргументом является сам тип класса. Я хотел бы знать, можем ли мы сделать что-нибудь, чтобы извлечь тип класса из двух потребностей свойства указателей на функции. что-то вродеproperty <int, &setInt, &getInt> myInt;
.
Вы знаете какой-либо способ устранить первый параметр шаблона?