Supponiamo che io abbia una funzione template
:Come passare una funzione template in un elenco di modelli argomenti
template<typename T>
T produce_5_function() { return T(5); }
Come posso passare tutto questo template
ad un altro template
?
Se produce_5_function
era un funtore, non ci sarebbe nessun problema:
template<typename T>
struct produce_5_functor {
T operator()() const { return T(5); }
};
template<template<typename T>class F>
struct client_template {
int operator()() const { return F<int>()(); }
};
int five = client_template<produce_5_functor>()();
ma voglio essere in grado di fare questo con un modello di funzione grezzo:
template<??? F>
struct client_template {
int operator()() const { return F<int>(); }
};
int five = client_template<produce_5_function>()();
Ho il sospetto che la risposta è "non puoi farlo".
C'è una ragione fondamentale per cui i parametri di template non possono essere modelli di funzioni? È probabile che ciò venga affrontato in futuro? – Olumide
@Olumide: Probabilmente perché è molto più complesso e facile da aggirare (vedi la risposta di mfontanini). Lo stesso vale per la specializzazione parziale, che viene utilizzata molto più degli argomenti del template template. –