我只是想知道以下类是否能正常工作。我有点害怕的是,在构造函数中,在标记的行上,我绑定到只是(临时)参数的值。所以问题是:std::bind
是否按参数取值?对我而言,我在阅读的文件中并不清楚这一点。
class BoundFct {
public:
BoundFct(function<void(int, int)> fct, int v){
boundFct = bind(fct, v, _1); // ** PROBLEM HERE ? **
}
void call(int i){
boundFct(i);
}
private:
function<void(int)> boundFct;
};
据我测试,它按预期工作。但它是否是一种在任何情况下都能正常工作的安全方法?
答案 0 :(得分:2)
来自std::bind
:
绑定的参数是复制或移动,除非包含在
std::ref
或std::cref
中,否则永远不会被引用传递。
您的代码没有任何不安全因素。虽然最好在BoundFct
构造函数中使用任何函数,而不是std::function<>
。