Нонеча тут пишу на современном C++, и понял, что я с лямбдами я что-то не понимаю.
Допустим имеем такой код:
template<typename F>
void x(F f)
{
std::string s;
F(s);
}
И использование
// Вариант 1
x([](string const& s) { ... })
// Вариант 2
x([](auto const& s) { ... })
А теперь проблемы:
Из-за того, что x принимает абсолютно любой тип, нет никаких подсказок какую лямбду вообще нужно писать.
Т.е. подсказок от среды разработки и компилятора не будет никаких.
Я хотел бы как-то в сигнатуре "x" сказать, что мне нужен любой функтор принимающий std::string.
Можно конечно через enable_if , но думается, что должен быть метод получше.
Вариант 2 добавляет ещё больше хлопот в поддержке.
Тут мало того что не видно типа, так и ещё не видно что ожидается.
Такой код писать тяжело, а про поддержку вообще молчу.
В идеале хотелось написать вот так и компилятор сам всё сделает и среда даст подсказки где надо.
Возможно уже есть предложения в стандарт ?
void x(f: (std::string const&) -> void)
{
std::string s;
F(s);
}
Если что std::function это не решение проблемы.