我正在尝试使用lambda来定义类成员。很巧妙的想法,但无法实现。。。这是我的例子。";MyModel";对象将获得一个基于另外两个参数的定义定义的参数。想要使用lambda来定义成员变量的值。在构造时,传递前两个参数。如果构造函数可能会变化,但基于lambda的参数的值将始终基于E和Nu的值,则这很方便。
class MyModel{
private:
vector<double> _vE;
vector<double> _vNu;
// Use Brace initializer with lambda inside to define ...
vector<double> _vC { [=](vector<double>&e,
vector<double> &nu) {
vector<double>c;
for ( int i = 1; i <= e.size(); i++ ){
c[i] = e[i] / std::pow( 1 - _vNu[i] , 2);
}; // end for
return c;}};
public:
MyModel();
MyModel(vector<double> vE, vector<double> vNu): _vE(vE), _vNu(vNu)
{
}
~MyModel(){}
};
我承认,我认为这个想法存在更大的问题。我仍在改进lambdas的用法,所以要友善。
在定义lambda之后,您需要实际调用它
int someVar = 2;
[...](int a) {/*labmda body*/} (someVar);
请注意(someVar)
部分,它实际上正在调用新定义的lambda。如果lambda不带参数,只需在其定义后附加一个()
即可。
因此,要修复原始代码,只需将实际参数附加到新的lambda定义中,如下所示:
class MyModel{
private:
vector<double> _vE;
vector<double> _vNu;
// Use Brace initializer with lambda inside to define ...
vector<double> _vC { [=](vector<double>&e, vector<double> &nu)->vector<double>
{
vector<double>c;
for ( int i = 1; i <= e.size(); i++ ){
c[i] = e[i] / std::pow( 1 - _vNu[i] , 2);
};
return c;
}(_vE, _vNu)
};
};
希望它能有所帮助!