使用 bind() 我可以做到这两个:
void f(int a) { }
class C {
public:
void f (int a) { }
};
int main()
{
auto f1 = std::bind (f,3);
f1();
C myC;
auto f2 = std::bind (&C::f, &myC, 3);
f2();
}
大概在下面,f1() 以某种方式被翻译成 f(3),而 f2() 被翻译成 (&myC)->f (3)。我不太关心“3”参数的绑定,但我想了解 bind() 如何自动知道 f1 应该只是一个直接的函数调用,而 f2 应该是一个对象的成员调用。在编译时用于检查第一个 arg 是什么“风味”的技术是什么?我想在我自己的程序中利用这种技术。