Regardons les choses en asssume, que nous avons un funcion modèle:Est-il possible de transmettre un modèle de fonction en tant qu'argument de modèle?
template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}
et maintenant nous voulons l'utiliser comme un argument dans un autre modèle, par exemple comme ça
template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}
Est-ce possible?
Je sais que je peux utiliser une structure avec un opérateur defined(). Je suis juste curieux de connaître les fonctions.
EDIT:
Pendant que je rédigeais cette question mon ami a trouvé une solution partielle:
template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}
Mais encore - je suis curieux de savoir s'il est possible sans matérialisation d'un type de fonction avant appel. Par exemple - je souhaite appeler le modèle passé avec diverses combinaisons de types:
template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 a, T2 b) {
// some code...
a = some_function<T1, T1, T1>(a, a);
a = some_function<T1, T2, T1>(a, b);
b = some_function<T2, T2, T2>(b, b);
b = some_function<T2, T1, T2>(b, a);
// some code...
}
Je ne comprends pas un mot de ce que vous dites .. -1, pouvez-vous fournir une illustration pour nous qui ne parlent pas couramment? – lurscher
@lurscher parce que vous ne comprenez pas c'est une horrible raison de downvote. Je ne rejette pas les physiciens quantiques quand ils parlent de la physique quantique parce que je ne la comprends pas. –
@SethCarnegie, je ne suis pas d'accord. Je pense que c'est, en soi, une très bonne raison. d'ailleurs, la réponse est fausse aussi; ce que la question veut faire est complètement possible, même en C++ 03.Je pense qu'il y a un décalage entre ce que le SO demande et ce que pmr répond, d'où la downvote. S'il améliore sa réponse je serai plus qu'heureux de le retirer – lurscher