То, что вы пытаетесь сделать, не совсем понятно, но я предполагаю, что «bind» - это boost :: bind (или tr1 :: bind).
Пара проблем с привязкой (Display :: SomeTask, this, _1):
- Это должно быть & Display :: SomeTask
- Заполнитель _1 не имеет смысла, потому что это создает унарный объект функции и:
- Display :: SomeTask не принимает аргументов
- Action :: operator () не принимает аргументов
Используя Boost.Function и Boost.Bind, вот что вы могли бы написать, чтобы получить то, что, как мне кажется, вы пытаетесь сделать:
typedef boost::function<void(void)> Action;
class Data {
public:
Data();
~Data();
Register(Action action) { _a = action; }
private:
Action _a;
};
class Display {
public:
Display(Data d) { d.Register( bind(&Display::SomeTask, this) ); }
~Display();
void SomeTask();
};