Diciamo che abbiamo un modello di classe come questo:Deduzione della funzione
template<typename F>
class A
{
public:
template<typename... Args>
A(F f, Args... args)
{ /* Do something... */ }
};
E ora voglio usare in qualche modo simile a questo:
A<int(int)> a(::close, 1);
Ora la domanda è: c'è un modo per omettere lo <int(int)>
perché un compilatore può conoscere queste informazioni per lo ::close
? Non è necessario salvare il "design" del modello.
Per quanto riguarda il compito concreto, ho bisogno di progettare un modello di una classe. Gli oggetti di questa classe potrebbero prendere una funzione e parametri per questa funzione in fase di costruzione e chiamare questa funzione in un secondo momento.
Credo che il modo corretto per eseguire tali funzioni di fabbrica sia usare 'std :: decay' o un tratto simile su' A '. Il che renderebbe 'A >'. Vedi http://en.cppreference.com/w/cpp/utility/optional/make_optional o altro 'make_ *' riferimento –
KABoissonneault
@KABoissonneault Sì hai ragione, se uso riferimenti universali dovrei usare 'std :: decay' , Ho aggiornato la risposta. – Holt
Non ho capito bene la domanda, e quindi la risposta. L'intero obiettivo è quello di poter dire "auto a (:: chiudi, 1)'? – Assimilater