是否有方法将回调附加到C++;对象成员? 语境:我的C++经验大约是3/10,所以请容忍我。 我很想知道是否有可能将一个读回调函数附加到C++对象成员上,这样当我赋值: var = object.member;

是否有方法将回调附加到C++;对象成员? 语境:我的C++经验大约是3/10,所以请容忍我。 我很想知道是否有可能将一个读回调函数附加到C++对象成员上,这样当我赋值: var = object.member;,c++,C++,这将调用回调,在返回成员之前更新成员。我可以通过以下方式达到同样的目的: ... var = object.GetMemberVal(); ... int FooClass::GetMemberVal() { // update member value return this->member; } 但是val=object.member;(无帕伦斯)有点干净,似乎更接近面向对象的精神。。。我想 我想可能有关联,但我不完全明白 这是否是一个好主意可能会引起争论,我只是想知

这将调用回调,在返回成员之前更新成员。我可以通过以下方式达到同样的目的:

...
var = object.GetMemberVal();
...
int FooClass::GetMemberVal()
{
    // update member value
    return this->member;
}
但是val=object.member;(无帕伦斯)有点干净,似乎更接近面向对象的精神。。。我想

我想可能有关联,但我不完全明白


这是否是一个好主意可能会引起争论,我只是想知道这是否可能。

如果我理解你的意思是正确的,你可能会想用它:

auto myGetMemberVal = std::bind(&FooClass::GetMemberVal, object);

// ...

int value = myGetMemberVal();  // Actually calls object.GetMemberVal()

<> >代码> STD::BION/COD>函数创建一个可调用对象,它将调用您所告诉的函数。

< Por> Borland C++ Builder有类似的东西,称为<代码>属性< />代码>,但它不是标准C++特性。

使用标准C++,可以创建一个模板类,它封装成员并至少实现这些函数:

  • 运算符T
    :用于读取值。T是成员的类型(例如int)
  • 运算符=
    :用于写入值
对于简单的内置类型,它相当简单


如果您希望该成员只是一个
int
,并且您只希望直接访问它(无包装),那么您不能这样做。

这是否有助于您的事业:

#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;
}
#包括
typedef int(*func)(int,int);
整数f1(整数x,整数y)
{
返回x+y;
}
甲级{
int_x;
国际;
int_z;
公众:
A(intnum1,intnum2):y(num1),z(num2){}
无效集(int(*f)(int x,int y))
{
_x=(*f)(_y,_z);
}
int get()
{
返回x;
}
};
int main()
{
实例(11,1);
实例集(f1);

std::coutWhat about
object.member=var
?在这种情况下会发生什么?当然可以,但这是一种黑客行为,不实用,您可以创建一个类来重载
=
操作符,并为左成员或右成员调用回调。您还需要知道
成员
属于哪个实例...