背景信息:我的C ++体验大概是3/10,所以请耐心等待。
我很想知道是否可以将读回调函数附加到C ++对象成员,以便在分配时:
var = object.member;
这会调用一个回调,它会在返回成员之前更新成员。
我可以达到同样的目的...
var = object.GetMemberVal();
...
int FooClass::GetMemberVal()
{
// update member value
return this->member;
}
但是 val = object.member; (没有parens)有点干净,似乎更接近面向对象的精神......我想。
我认为member function as callback可能有关系,但我并非完全关注。
这是否是一个好主意可能有争议,我只是想知道它是否可能。
答案 0 :(得分:0)
如果我理解你的错误,你可能需要std::bind
来使用它:
auto myGetMemberVal = std::bind(&FooClass::GetMemberVal, object);
// ...
int value = myGetMemberVal(); // Actually calls object.GetMemberVal()
std::bind
函数创建一个可调用对象,该对象将调用您告诉它的函数。
答案 1 :(得分:0)
Borland C ++ Builder之类的东西叫做property
,但它不是标准的C ++特性。
使用标准C ++,您可以创建一个包装成员的模板类,并至少实现这些功能:
operator T
:用于读取值。 T是成员的类型(例如int)operator =
:用于写入值对于简单的内置类型,它非常简单。
如果您希望该成员只是int
并且您只想直接访问它(没有包装器),那么您就无法做到。
答案 2 :(得分:0)
这是否有助于您的事业:
#include <iostream>
typedef int (*func)(int,int);
int f1(int x,int y)
{
return x+y;
}
class A{
int _x;
int _y;
int _z;
public:
A(int num1,int num2):_y(num1),_z(num2){}
void set ( int (*f)(int x,int y))
{
_x = (*f)(_y,_z);
}
int get ()
{
return _x;
}
};
int main()
{
A instance(11,1);
instance.set(f1);
std::cout<<instance.get()<<std::endl;
}