绑定功能问题

发布于 2024-09-11 11:03:00 字数 523 浏览 8 评论 0原文

我使用 boost (信号 + 绑定)和 c++ 来传递函数引用。这是代码:

#define CONNECT(FunctionPointer) \
        connect(bind(FunctionPointer, this, _1));

我这样使用:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT(&SomeClass::test1);
     CONNECT(&SomeClass::test2);
  }
};

第二个测试函数绑定有效(test2),因为它至少有一个参数。第一次测试时出现错误:

‘void (SomeClass::*)()’ is not a class, struct, or union type

为什么我无法传递没有参数的函数?

I'm using boost (signals + bind) and c++ for passing function reference. Here is the code:

#define CONNECT(FunctionPointer) \
        connect(bind(FunctionPointer, this, _1));

I use this like this:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT(&SomeClass::test1);
     CONNECT(&SomeClass::test2);
  }
};

Second test function binding works (test2), because it has at least one argument. With first test I have an error:

‘void (SomeClass::*)()’ is not a class, struct, or union type

Why I don't able to pass functions without arguments?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绾颜 2024-09-18 11:03:00

_1 是一个占位符参数,表示“替换为第一个输入参数”。方法 test1 没有参数。

创建两个不同的宏:

#define CONNECT1(FunctionPointer) connect(bind(FunctionPointer, this, _1));
#define CONNECT0(FunctionPointer) connect(bind(FunctionPointer, this));

但请记住宏是邪恶的

并像这样使用它:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT1(&SomeClass::test1);
     CONNECT0(&SomeClass::test2);
  }
};

_1 is a placeholder argument that means "substitute with the first input argument". The method test1 does not have arguments.

Create two different macros:

#define CONNECT1(FunctionPointer) connect(bind(FunctionPointer, this, _1));
#define CONNECT0(FunctionPointer) connect(bind(FunctionPointer, this));

But remember macros are evil.

And use it like this:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT1(&SomeClass::test1);
     CONNECT0(&SomeClass::test2);
  }
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文