你好我有一个签名的功能
std :: string f(double x,double param1,double param2,double param3);
我想在std :: vector xvalues上为参数x调用它,使用std :: transform作为param1,param2和param3的特定值.
它相当于:
double param1(1.);
double param2(1.1);
double param3(1.2);
std::vector<std::string> results();
for (std::vector<double>::const_iterator it = xvalues.begin() ; it != xvalues.end() ; ++xvalues)
{
results.push_back(f(*it, param1, param2, param3);
}
Run Code Online (Sandbox Code Playgroud)
如何以更优雅的方式完成?
亲切的问候托尼
ice*_*ime 16
您应该查看boost :: bind,它将允许您(如名称所示)为您的函数"绑定"参数f:
std::transform([...], boost::bind(&f, _1, param1, param2, param3));
Run Code Online (Sandbox Code Playgroud)
这个绑定的结果是一个一元函数(_1是用于它应该与被称为参数的占位符):所有其他参数将是固定值param1,param2,param3.
为了完整起见,C++ 0x版本,或者关于lambdas的大惊小怪?
std::transform([...], [=](double i){ return f(i, param1, param2, param3); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3139 次 |
| 最近记录: |