C++:将函数分配给 tr1::function 对象

2024-01-12

我们的一个类提供了 tr1::function 回调对象。但是,当我尝试为其分配成员函数时,出现编译器错误。

以下示例未经测试,仅用于说明:

Foo.h:

class Foo()
{
public:
  Foo();
  std::tr1::function<void (int x)> F;
}

Bar.h:

class Bar()
{
public:
   Bar();
   Foo* foo;
   void HookUpToFoo();
   void Respond(int x);
}

Bar.cpp:

Bar()
{
    this->foo = new Foo();
    this->HookUpToFoo();
}

void Bar::HookUpToFoo()
{
  this->foo->F = &Bar::Respond; // error
}

void Bar::Respond(int x)
{
       // do stuff
}

我们得到的编译器错误引用了 xrefwrap 中的一行,并且是 错误 1 ​​错误 C2296:“.*”:非法,左操作数的类型为“int”C:\Program Files\Microsoft Visual Studio 9.0\VC\include\xrefwrap 64

..我在分配代表时做错了什么?我想走更现代的路线并使用 tr1::function 而不是函数指针。


成员函数接受额外的隐藏参数:this。这使得它与您的不兼容function只接受一个参数的对象。您可以使用以下方法将成员函数绑定到特定实例bind,这也可以在tr1:

using namespace std::tr1::placeholders;

this->foo->F = std::tr1::bind(&Bar::Respond, this, _1);

这确保了Bar::Respond将使用绑定到的正确值进行调用this. The _1是附加参数的占位符 (x).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:将函数分配给 tr1::function 对象 的相关文章

随机推荐