1

使用 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 是什么“风味”的技术是什么?我想在我自己的程序中利用这种技术。

4

1 回答 1

2

一个简单的打包方法是使用

std::is_member_function_pointer<F>::value

whereF是第一个参数的类型,可能删除了潜在的引用和 cv 限定。

于 2013-09-18T14:04:18.267 回答