벡터의 모든 요소를 다른 어떤 산술 연산 (코드가 아님)을 사용하여 로그 값으로 변환하려고합니다. Boost.Lambda를 사용하면 어떻게됩니까?<cmath>의 함수를 Boost.Lambda와 함께 사용하는 방법은 무엇입니까?
내가 말했듯이, 더 많은 산술 연산이 있으므로 Boost.Bind가있는 표현식이 저에게는 효과적이지 않습니다 (너무 복잡하고 너무 길며 읽을 수 없음).
저는 C++ 11 람다도 사용하고 싶지 않습니다. 하지만 ... 아무것도 바꿀까요?
내 코드는 같은 수 있습니다 :
Error 1 error C2665: 'log' : none of the 3 overloads could convert all the argument types
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(120): could be 'double log(double)'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(527): or 'float log(float)'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h(575): or 'long double log(long double)'
while trying to match the argument list '(boost::lambda::placeholder1_type)'
업데이트 1 : 내가 펑터를 작성하지 않으
#include <boost/lambda/lambda.hpp>
#include <cmath>
#include <vector>
void testLambda()
{
using namespace boost::lambda;
std::vector<double> v;
v.push_back(1); v.push_back(2); v.push_back(3);
std::transform(v.begin(), v.end(), v.begin(), _1/0.5); // works
std::transform(v.begin(), v.end(), v.begin(), log(_1)/0.5); // produces error
//std::transform(v.begin(), v.end(), v.begin(), std::log(_1)/0.5); // produces error
//std::transform(v.begin(), v.end(), v.begin(), static_cast<double(*)(double)>(std::log)(_1)/0.5); // produces error
}
내가 코드를 컴파일하려고, MSVC2010 오류를 제공합니다 그것을 위해, 나는 그들 중 12 개를 가져야한다고 생각합니다. 그 때 무엇입니까?
업데이트 2 : 나는 C++ 11 람다와 함께 할 수 있어요 하지만 은 내가을 위해 무엇을 물어 아니다 :
std::transform(v.begin(), v.end(), v.begin(), [](const double & x) { return log(x)/0.5; });
http://stackoverflow.com/a/1931602/98654/함께 결합 여러 람다를 사용하는 예제가 있습니다 - 그게 니가 찾고있는거야? –
그냥 일반 함수 객체를 작성하십시오. – TemplateRex
@NateKohl lambdas와 bind가 함께 작동하지 않습니다. 해결책을 주시겠습니까? –