Я экспериментировал с решением типа функционального программирования по проблемам в C ++ 11, и время от времени я находился в ситуации, когда мне нужна функция, которая возвращает постоянное значение.
const :: a -> b -> a
const x = \_ -> x
< /code>
, которая возвращает функцию, которая оценивается в исходный аргумент Const, независимо от того, какой аргумент предоставлен для нее. Я хотел бы создать что -то подобное в C ++ 11. Такие конструкции полезны для обозначения особого поведения в функциях (постоянная функция истинного, отправленного фильтру, оставит данные нетронутыми). Вот моя первая попытка: < /p>
template
std::function constF(T x) {
return ([x](...) { return x; });
}
< /code>
Это компилируется самостоятельно, но любая попытка использовать его приводит к ошибкам неполного типа. Моя вторая попытка была следующая: < /p>
template
std::function constF(T x) {
return ([x](Args...) { return x; });
}
< /code>
Это приближается, но не позволяет мне предоставить какие -либо аргументы, если я явно их не укажу. < /p>
auto trueFunc1 = constF(true);
auto trueFunc2 = constF(true);
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/17890513/haskell-like-const-in-c[/url]
Я экспериментировал с решением типа функционального программирования по проблемам в C ++ 11, и время от времени я находился в ситуации, когда мне нужна функция, которая возвращает постоянное значение.[code]const :: a -> b -> a const x = \_ -> x < /code> , которая возвращает функцию, которая оценивается в исходный аргумент Const, независимо от того, какой аргумент предоставлен для нее. Я хотел бы создать что -то подобное в C ++ 11. Такие конструкции полезны для обозначения особого поведения в функциях (постоянная функция истинного, отправленного фильтру, оставит данные нетронутыми). Вот моя первая попытка: < /p> template std::function constF(T x) { return ([x](...) { return x; }); } < /code> Это компилируется самостоятельно, но любая попытка использовать его приводит к ошибкам неполного типа. Моя вторая попытка была следующая: < /p> template std::function constF(T x) { return ([x](Args...) { return x; }); } < /code> Это приближается, но не позволяет мне предоставить какие -либо аргументы, если я явно их не укажу. < /p> auto trueFunc1 = constF(true); auto trueFunc2 = constF(true); cout