Retourner au contenu associé (journal : Rust en version 0.12)
Posté par CrEv (site web personnel) le 15 octobre 2014 à 11:13. En réponse au journal Rust en version 0.12. Évalué à 2.
En fait si on veut avoir la même chose avec les std:function et que ça marche :
#include <iostream> #include <functional> template <class T> std::function<T(T x)> square = [] (T x) { return x * x; }; template <class T> std::function<T(T x, std::function<T(T x)> f)> twice = [] (T x, std::function<T(T x)> f) { return f(x) + f(x); }; int main() { std::cout << twice<int>(5, square<int>) << std::endl; std::cout << twice<double>(5.1, square<double>) << std::endl; return 0; }
Par contre il faut se méfier, il faut activer c++1y g++ -std=c++1y main.cpp pour avoir des variables paramétrables.
g++ -std=c++1y main.cpp
En fait square et twice sont des variables de type std::function mais paramétrés (version template).
square
twice
std::function
Après si on veut simplifier un poil, on peut utiliser auto :
auto
#include <iostream> #include <functional> template <class T> std::function<T(T x)> square = [] (auto x) { return x * x; }; template <class T> std::function<T(T x, std::function<T(T x)> f)> twice = [] (auto x, auto f) { return f(x) + f(x); }; int main() { std::cout << twice<int>(5, square<int>) << std::endl; std::cout << twice<double>(5.1, square<double>) << std::endl; return 0; }
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
[^] # Re: simple ?
Posté par CrEv (site web personnel) . En réponse au journal Rust en version 0.12. Évalué à 2.
En fait si on veut avoir la même chose avec les std:function et que ça marche :
Par contre il faut se méfier, il faut activer c++1y
g++ -std=c++1y main.cpppour avoir des variables paramétrables.En fait
squareettwicesont des variables de typestd::functionmais paramétrés (version template).Après si on veut simplifier un poil, on peut utiliser
auto: