저는 C++ 11과 모든 훌륭한 새로운 기능을 따라 잡으려고합니다. 나는 람다에 조금 붙어있다.Lambdas and std :: function
template<typename BaseT>
vector<BaseT> findMatches(vector<BaseT> search, function <bool (const BaseT &)> func)
{
vector<BaseT> tmp;
for(auto item : search)
{
if(func(item))
{
tmp.push_back(item);
}
}
return tmp;
}
은 기본적으로 내가 분별에 가능 람다를 좁히려 :
#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>
#include <functional>
using namespace std;
template<typename BaseT, typename Func>
vector<BaseT> findMatches(vector<BaseT> search, Func func)
{
vector<BaseT> tmp;
for(auto item : search)
{
if(func(item))
{
tmp.push_back(item);
}
}
return tmp;
}
void Lambdas()
{
vector<int> testv = { 1, 2, 3, 4, 5, 6, 7 };
auto result = findMatches(testv, [] (const int &x) { return x % 2 == 0; });
for(auto i : result)
{
cout << i << endl;
}
}
int main(int argc, char* argv[])
{
Lambdas();
return EXIT_SUCCESS;
}
내가하고 싶은 것은이된다
여기에 내가 일을 얻을 수 있었다 코드는 기능들의 부분 집합. 내가 무엇이 누락 되었습니까? 이것은 가능한가? 저는 GCC/G ++ 4.6을 사용하고 있습니다.
원하는 경우 (예 :'std :: function'을 사용하여) 어떤 오류가 발생합니까?또한 일부 C++ 11 지원은 GCC에서 완전히 지원되지 않으며 GCC 4.7에서는 4.6보다 훨씬 적습니다. –
두 번째 코드 샘플이 좋아 보인다. 어떤 오류가 발생합니까? – ecatmur
템플릿은 정확히 일치하는 것을 허용하기 때문에'std :: function'을 기대하는 함수 템플릿에 람다를 전달할 수 없습니다. 게다가,'function' 생성자는 실제로'function' 서명과 일치하지 않는 인수를 거부 할 필요가 없기 때문에, 실제로 그것을 좁히는 것은 유용하지 않습니다. – JohannesD