Указать тип параметра у функтора
От: _NN_ www.nemerleweb.com
Дата: 26.07.18 14:17
Оценка:
Нонеча тут пишу на современном 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 это не решение проблемы.
  • http://rsdn.nemerleweb.com
    http://nemerleweb.com
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.