C# a types de fonctions génériques tels que Action<T>
ou Func<T,U,V,...>
C# le style d'action <T>, Func <T,T>, etc en C++ 0x
Avec l'avènement de C++ 0x et la possibilité d'avoir du modèle de typedef et paramètres du modèle variadique , il semble que cela devrait être possible.
La solution évidente pour moi serait:
template <typename T>
using Action<T> = void (*)(T);
cependant, cela ne peut pas accueillir de foncteurs ou C++ 0x lambdas, et au-delà, ne compile pas avec l'erreur "expected unqualified-id before 'using'
"
Ma prochaine tentative était peut-être utiliser la fonction boost :::
template <typename T>
using Action<T> = boost::function<void (T)>;
Cela ne compile pas non plus, pour la même raison.
Mon seul autre idée serait des arguments de modèle de style STL:
template <typename T, typename Action>
void foo(T value, Action f) {
f(value);
}
Mais cela ne fournit pas une solution fortement typé et n'est pertinente dans la fonction basé sur un modèle.
Maintenant, je serai le premier à admettre que je ne suis pas le C++ wiz que je préfère penser que je suis, il est donc très possible qu'il y ait une solution évidente que je ne vois pas.
Est-il possible d'avoir des types de fonctions génériques de style C# en C++?
Non, ce n'est pas possible. Pas assez. Ce sont des langues différentes. La question est de savoir quelle est l'approximation la plus proche, * en fonction de vos besoins *. Avez-vous besoin d'un effacement de type, de sorte que chaque foncteur ayant la même signature apparaît comme le même type? Si c'est le cas, vous devrez passer à travers des cerceaux, et perdre de l'efficacité. Et souvent, cela n'en vaut pas la peine, car en raison des différences entre les modèles et les génériques, ce n'est souvent pas * nécessaire *. Souvent, mais pas toujours. De quoi avez-vous besoin exactement? Autre que d'essayer aveuglément d'émuler C# en C++ – jalf