开发者

Bind function trouble

开发者 https://www.devze.com 2023-01-08 07:59 出处:网络
I\'m using boost (signals + bind) and c++ for passing function reference. Here is the code: #define CONNECT(FunctionPointer) \\

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(开发者_JAVA技巧&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?


_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);
  }
};
0

精彩评论

暂无评论...
验证码 换一张
取 消