【发布时间】:2018-11-29 17:32:49
【问题描述】:
我是 VS2013 的用户,我经常使用如下初始化,它的工作就像一个魅力:
MyClass::MyClass myRoutine(){
std::function<double(double)> oFunc = std::bind(&Myclass::myfunction, this, std::placeholders::_1);
}
MyClass::MyClass myfunction(double & inX){
return 0;
}
我决定升级到VS2015,但是编译器报错:
错误 C2440: 'initializing': 无法从 'std::_Binder<:_unforced myclass:: std::_ph> & 转换>' 到 'std::function
'
发生了什么?
【问题讨论】:
-
为什么要把
double(double &)函数放到double(double)中?另外,你为什么使用bind而不是 lambda? Lambda 更好,更容易调试和编译成更好的代码。 -
我使用bind的唯一原因是因为它在VS2013中工作......当然,如果有更好的方法,我正在听
-
我很确定 VS2013 也支持这一点:
... oFunc = [this](double &x){ return myfunction(x); };。如果你愿意,我可以把它变成一个答案。 -
一个解释为什么它在 VS2013 中工作的答案,以及更好的编写方式将受到欢迎
-
为什么有效? Lambdas 还是你的旧代码?
标签: c++ c++11 visual-studio-2015 visual-studio-2013 stl