는 I는 펑이함수에서 정의 된 펑터를 다른 함수로 전달할 수없는 이유는 무엇입니까?
using namespace std;
int main(int argc, char* argv[])
{
struct MYINC {
int operator()(int a) { return a+1; }
} myinc;
vector<int> vec;
for (int i = 0; i < 10; i++) vec.push_back(myinc(i));
return 0;
}
같은 함수 내의 함수를 정의 시뮬레이션하는 데 사용하지만 이러한 표준으로서, 외부 함수에 전달 된 경우 : 다음의 예와 같이 변환 될 수 발견 I
using namespace std;
int main(int argc, char* argv[])
{
struct MYINC{
int operator()(int a) { return a+1; }
} myinc;
vector<int> vec;
for (int i = 0; i < 10; i++) vec.push_back(i);
transform(vec.begin(), vec.end(), vec.begin(), myinc);
return 0;
}
error: no matching function for call to ‘transform(std::vector<int>::iterator, std::vector<int>::iterator, std::vector<int>::iterator, main(int, char**)::MYINC&)’
그래서 나는 주요 함수 외부 정의를 넣어 모두가 지금은 OK입니다 말하는 컴파일 오류가 발생했습니다 맞는지. C++ 템플릿을 인스턴스화하는 데 사용할 수있는 유형에 03에서 잘 알려진 꽤 성가신 제한 (WAS)가 나에게 완전히 명확하지 않은 이유로
using namespace std;
struct MYINC{
int operator()(int a) { return a+1; }
} myinc;
int main(int argc, char* argv[])
{
vector<int> vec;
for (int i = 0; i < 10; i++) vec.push_back(i);
transform(vec.begin(), vec.end(), vec.begin(), myinc);
return 0;
}
[중복 된 답변] (http://stackoverflow.com/questions/9772446/c-local-class-as-functor)을 발견했습니다. –