Проблема с функцией привязки - PullRequest
3 голосов
/ 23 июля 2010

Я использую 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

Почему я не могу передавать функции без аргументов?

1 Ответ

4 голосов
/ 23 июля 2010

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