Я могу легко связать функции-члены с std::function
, обернув их выражением лямбда с предложением захвата.Как напрямую связать функцию-член с функцией std :: в Visual Studio 11?
class Class
{
Class()
{
Register([=](int n){ Function(n); });
}
void Register(std::function<void(int)> Callback)
{
}
void Function(int Number)
{
}
};
Но я хочу связать их напрямую, что-то вроде следующего.
// ...
Register(&Class::Function);
// ...
Я думаю, что согласно стандарту C++ 11, это должно поддерживаться. Однако в Visual Studio 11 я получаю эти ошибки компилятора.
ошибка C2440: 'перевод строки': не удается преобразовать из 'межд' до 'Класс *'
ошибка C2647: '*': не может разыменовывать Пустота (__thiscall Class :: *) (интермедиат)»на 'Int'
Работает, но может быть упрощен синтаксис при ограничении, что все ссылки класса одинаковы? – danijar
@ danijar, что вы подразумеваете под всеми ссылками на класс? Вам нужно передать указатель на экземпляр класса. Который вы проходите, зависит от вас. – juanchopanza
Справа. И этот экземпляр всегда будет таким же. Теперь я хотел бы укоротить «bind (& Class :: Function, this, _1)» с учетом этой информации. Таким образом, «привязка» дословно устарела. Есть ли технический способ избавиться от него или выполнить привязку внутри функции после прохождения? – danijar