rusbaron
@rusbaron
Не стыдно не знать, стыдно не интересоваться

Как указать в шаблонной функции лямбда функцию как параметр?

Есть задача,где нужно разложить один контейнер на 2 других по условию, которое будет задаваться лямбда функцией.
Как мне указать в шаблоне в качестве параметра, что это лямбда функция?
template<typename inputType,typename leftContainer,typename rightContainer>
void OddEven(inputType input,leftContainer left,rightContainer right,лямбда функция){
    for(auto key:input){
        if(лямбда функция(key)){
            left.insert(left.end(),key);
        }else{
            right.insert(right.end(),key);
        }
    }
}

{
		//Например:
		std::vector<int> v{ 1,2,3,4,5 };
		std::list<int> l; //сюда четные
		std::deque<int> d; //а сюда нечетные
		OddEven(v, l, d, [](const auto &val){val>0?true:false;});
		
		asm("nop");
	}
  • Вопрос задан
  • 354 просмотра
Решения вопроса 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Как и в случае с обычной функцией:
template <class F>
void foo(F f) {}
Ответ написан
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
вот пример для подражания: www.cplusplus.com/reference/algorithm/copy_if
template<typename InputType, typename LeftContainer, typename RightContainer, typename UnaryPredicate>
void OddEven(InputType input,LeftContainer left, RightContainer right, UnaryPredicate pred)
{
	for (auto key:input)
	{
		if (pred(key))
			left.push_back(key);
		else
			right.push_back(key);
	}
}


ps. имена типов пишите с большой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы