Mogę łatwo powiązać funkcje składowe z std::function
, zawijając je wyrażeniem lambda z klauzulą przechwytywania.Jak bezpośrednio powiązać funkcję składową do funkcji std :: w Visual Studio 11?
class Class
{
Class()
{
Register([=](int n){ Function(n); });
}
void Register(std::function<void(int)> Callback)
{
}
void Function(int Number)
{
}
};
Ale chcę je powiązać bezpośrednio, coś jak poniżej.
// ...
Register(&Class::Function);
// ...
Myślę, że zgodnie ze standardem C++ 11 powinno to być obsługiwane. Jednak w Visual Studio 11 dostaję te błędy kompilatora.
error C2440: 'nowej linii': nie można przekonwertować z 'int' do 'klasa *'
error C2647: '*': nie można dereference o „void (__thiscall Class :: *) (int)”na 'int'
Works, ale może zostać uproszczona składnia pod przymusem, że wszystkie odniesienia klasy są takie same? – danijar
@danijar co masz na myśli, gdy wszystkie odniesienia do klas są takie same? Musisz przekazać wskaźnik do instancji 'Class'. Który z nich przekazujesz zależy od ciebie. – juanchopanza
Dobrze. I ta instancja zawsze będzie taka sama. Teraz chciałbym skrócić "bind (& Class :: Function, this, _1)" mając na uwadze te informacje. Więc treściowo "bind" jest przestarzały. Czy istnieje sposób na pozbycie się go lub wykonanie wiązania w funkcji po przejściu? – danijar