this 질문 나는 functor (함수 객체)에 대해 잘 알고 있습니다. 초기화하고 호출하는 방법. 나는 의견의 일부에서 위의 질문에서보고 다음과 같은 컴파일 오류왜 std :: transform에서 함수 객체 인수를 사용하지 않고 대신 람다 표현식을 사용해야합니까
Severity Code Description Project File Line Suppression State
Error C2064 term does not evaluate to a function taking 1 arguments
을 내 자신의 이해
class Foo
{
private:
int x;
public:
Foo(int x) : x(x) {}
int operator()(int y) { return x + y; }
};
Foo poo(50);
int a = poo(50);
std::cout << a;
std::vector<int> vec(10);
std::vector<int> pec(10);
std::transform(vec.begin(), vec.end(), vec.begin(), poo(1));
이 놀러받을 몇 가지 코드를 작성하는 대신 람다 식을 시도 허용 대답이 std::transform(in.begin(), in.end(), out.begin(), add_x(1));
를 사용하는 이유 작동
std::transform(vec.begin(), vec.end(), vec.begin(), [](Foo poo) {return poo(1); });
하지만 이해가 안 돼요 실패합니다. 왜 람다 표현식을 사용해야합니까? 또 다른 대답은 똑같은 일을하지만 여전히 컴파일 오류가 발생합니다. 왜 그런가요?
오타처럼 들립니다. 'poo (1)'->'Foo (1)'. –
나는 오해의 소지가있는 약간의 오류 메시지가 더 존재한다고 생각한다. 존재하지 않는 것을 참조하고 있다는 사실을 놓치게 만든다. –
'poo (1)'은'int'입니다; 오류 메시지가 말하듯이, 1 인수를 취하는 함수가 아닙니다. 'Foo (1)'은'int' 형의 단일 인수를 취하는'operator()'함수 객체입니다. –