2013-04-22 2 views
1

Я знаю, что я могу сделать это:Вызов функции внутри станд :: all_of

vector<int> insidetest; 

if(std::all_of(insidetest.begin(),insidetest.end(),[](int i){return i>100;})) 
    { 
     std::cout << "All greater" << std::endl; 
    } 

, но я хочу, чтобы вызвать другую функцию (возможно, более сложный, чем просто> 1000). Как я могу вызвать другую функцию внутри станд :: all_of, например:

bool fun(const vector<int> *s) 
    { 
    return true; 
    } 
+2

Это не ясно, что вы хотите сделать. Параметры, переданные в 'std :: all_of', будут иметь тип' typename Container :: value_type' (в данном случае 'int'), поэтому использование функции, которая принимает' const vector * s', не имеет смысла. – Yuushi

+0

Вы имеете в виду вызов 'fun' внутри лямбды, переданный' std :: all_of'? –

+0

Это моя ошибка. Я прочитал, что «подпись функции предиката должна быть эквивалентна следующему: bool pred (const Type & a)», поэтому в моем случае я думал, что это const vector *. Теперь я понимаю, как это работает –

ответ

8

Если fun есть такая подпись - нет никакой возможности. Это fun имеет подпись bool(int) затем просто написать

if(std::all_of(insidetest.begin(),insidetest.end(),fun)) 

Если вы хотите другие параметры в функции - вы можете использовать std::bind Например, подпись bool(int, int, int)

bool fun(int value, int min, int max) 
{ 
    return value > min && value < max; 
} 

if(std::all_of(insidetest.begin(),insidetest.end(), 
       std::bind(fun, std::placeholders::_1, 1, 5))) 
Смежные вопросы