C++ 如何使用std::sqrt(boost::lambda::placeholder 1_类型)?
如何在C++ 如何使用std::sqrt(boost::lambda::placeholder 1_类型)?,c++,c++11,boost,lambda,C++,C++11,Boost,Lambda,如何在boost::lambda::placeholder 1_类型上执行std::sqrt() 以下程序编译并执行良好。不知何故,它成功地将boost::lambda::_1转换为一个double并与5.0相乘 #include <boost/lambda/lambda.hpp> #include <iostream> #include <cmath> int main() { std::array<double, 6> a = {1,
boost::lambda::placeholder 1_类型上执行std::sqrt()
以下程序编译并执行良好。不知何故,它成功地将boost::lambda::_1
转换为一个double并与5.0相乘
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <cmath>
int main() {
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};
std::for_each(a.begin(), a.end(),
std::cout << boost::lambda::_1 * 5.0 << " "
);
}
编译器(g++)说
参数1从的转换未知
'boost::lambda::占位符1_类型{aka const
boost::lambda::lambda_函子>}'到
“双人”
那么,在这个std::for_each循环中,如何从boost::lambda::_1
中取平方根呢?用C++11的方法:
#include <iostream>
#include <cmath>
#include <array>
#include <algorithm>
int main() {
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};
std::for_each(a.begin(), a.end(),
[] (const auto&v ) { std::cout << sqrt(v) * 5.0 << " "; }
);
}
#包括
#包括
#包括
#包括
int main(){
数组a={1,4,9,16,25,36};
std::对于每个(a.begin(),a.end(),
[](const auto&v){std::cout您需要延迟调用sqrt
注意:您需要使用强制转换来选择正确的sqrt
重载
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <iostream>
#include <cmath>
int main()
{
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};
std::for_each(a.begin(), a.end(),
std::cout << boost::lambda::bind(static_cast<double(*)(double)>(std::sqrt), boost::lambda::_1) << " "
);
}
啊,过去的好日子,波士德
int main() {
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};
std::for_each(a.begin(), a.end(),
std::cout << boost::lambda::bind(static_cast<double(*)(double)>(std::sqrt), boost::lambda::_1 * 5.0) << " "
);
return 0;
}
intmain(){
数组a={1,4,9,16,25,36};
std::对于每个(a.begin(),a.end(),
std::cout你认为boost::lambda::1在那里做什么?问题:当你有C++11时,为什么要使用boost.lambda?如果你想调用一个函数,那么你应该使用基于.Range的for循环,在这个用例中会更简单。它没有回答OP的问题。事实上,OP还标记了问题C++11。这让人很困惑ince boost::lambda旨在复制现在标准化的功能。
1 2 3 4 5 6
int main() {
std::array<double, 6> a = {1, 4, 9, 16, 25, 36};
std::for_each(a.begin(), a.end(),
std::cout << boost::lambda::bind(static_cast<double(*)(double)>(std::sqrt), boost::lambda::_1 * 5.0) << " "
);
return 0;
}