使用lamda在类cpp中定义成员变量



我正在尝试使用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)
};
};

希望它能有所帮助!

最新更新