J'ai le code qui ressemble àfonction en tant que paramètre
template<typename C>
void invoke() {
if (thing_known_at_runtime) {
C::template run<int>(4);
} else {
C::template run<char>('a');
}
}
struct output {
template<typename T>
static void run(T x) {
cout << x;
}
};
invoke<output>();
Et cela fonctionne.
Mais je n'aime pas la définition du poids lourd de sortie. Je voudrais pouvoir écrire:
template<typename T>
void output(T x) {
cout << x;
}
Et puis appelez soit appeler < sortie>() ou appeler (sortie). Existe-t-il un moyen de définir invoke pour que cela fonctionne?
(la production et invoquer sont plus compliquées - ceci est une version simplifiée pour poser la question avec Non, des solutions qui impliquent sachant int quand je l'appelle Invoke ne sont pas utiles..)
est-11 C++ permis? Et ai-je bien compris que vous voulez juste appeler une fonction avec des arguments stockés? – chris
Comment std :: function peut-il m'aider? Oui, C++ 11 est autorisé. Je souhaite appeler une fonction avec des arguments stockés (calculés) * et des paramètres de modèle *. En fait, laissez-moi éditer l'exemple pour le rendre clair. – dspeyer
N'êtes-vous pas prêt à définir deux versions de 'invoke()'? – jxh