Bonjour à tous!
Ma question est assez simple à formuler: Comment valider les paramètres (de types) d'un operateur + combinant deux fonctions en une seule, dans le cadre d'expression template.
Mon objectif est d'avoir une template de la forme suivante:
La difficulté étant que la template doit pouvoir être instanciée pour plusieurs signatures, par exemple, deux fonctions int(int) ou deux fonctions double(double, double).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template <typename F1, typename F2> auto operator+(F1 f1, F2 f2) { static_assert(F1 et F2 s'appelle avec les mêmes arguments); static_assert(F1 et F2 produisent des types additionnables); return my::plus<F1, F2>{f1, f2}; }
J'essaie d'avoir un message clair si les types ne sont pas des fonctions/foncteurs compatible.
Par contre, je peux certainement rajouter des enable_if pour m'assurer d'avoir des foncteurs/fonctions, comme types. Cependant qu'en sera-t-il des lambda généralisées?
A priori, j'ai raté une astuce dans <type_trait>.
Quel serait le mécanisme pour vérifier qu'une expression est valide? un équivalent de is_compilable(f1+f2).
Partager