K
bind brauchen wir dank Lambdas dafür nicht mehr. Es ist zwar kurz aufgeschrieben, kann aber tierisch nerven, wenn man es mit Überladung zu tun hat. Überlädst Du tt::func , musst du nämlich den Typ von &tt::func explizit erwähnen, damit der Compiler weiß, welches func Du meinst. Außerdem ist ein großer Nachteil von std::bind(&tt::func,...) , dass die Information, welche Funktion ausgeführt werden soll, nicht mehr im Typ des bind-Ausdrucks vorhanden ist. Es ist ja nur ein Funktionszeiger. Du tust Dir damit keinen Gefallen, wenn Du so etwas in ein std::function<void(int,int)> reinstecken willst. Du hättest dann, wenn du das function -Objekt benutzt, unnötig viele "Funktionszeigersprünge" dabei.
Mit nicht-generischen Lambdas (gibt es auch ab C++11), sähe das so aus:
my_function func = [&tt](int a, int b){ tt.func(a, b); };
Apropos Funktionszeiger: Die Programmiersprache Rust arbeitet da übrigens etwas anders. Dort ist der Typ des Äquivalents zu &tt::func einzigartig und bezieht sich auf die Funktion, was Inlining immer noch sehr einfach für den Compiler macht. Da braucht man keine Lambdas, nur um Inlining zu fördern.