È ansible specificare in modo esplicito i parametri del modello di un costruttore?

Un costruttore di una class può essere una funzione di modello. Nel punto in cui viene chiamato un tale costruttore, il compilatore di solito esamina gli argomenti forniti al costruttore e determina da essi i parametri del modello utilizzato. C’è anche qualche syntax per specificare esplicitamente i parametri del template?

Un esempio forzato:

struct A { template A() {} }; 

C’è un modo per creare un’istanza di questa class? Qual è la syntax per specificare in modo esplicito i parametri del modello del costruttore?

Il mio caso d’uso sarebbe un problema se il compilatore non sembra trovare il costruttore di modelli corretto. Specificando in modo esplicito i parametri del modello probabilmente genererebbe più messaggi di errore utili o addirittura risolvere il problema.

No. Lo standard C ++ 03 dice:

[Nota: poiché l’elenco degli argomenti del modello esplicito segue il nome del modello di funzione e poiché i modelli di funzione dei membri di conversione e i modelli di funzione del membro di costruzione vengono chiamati senza utilizzare un nome di funzione, non è ansible fornire un elenco di argomenti del modello esplicito per questi modelli di funzione. ] (§14.5.2 / 5)

Esiste un’altra soluzione per il trasferimento delle informazioni sul tipo ai costruttori basati su modelli che non possono assumere un valore di questo tipo come argomento:

 template struct id {}; struct A { template A(id); }; A a=id(); 

Modificare:

Nota: A a(id()); non funzionerà, a causa della maggior parte dei problemi di analisi. Sarebbe interpretato come una dichiarazione di funzione. Vedi questa domanda per ulteriori spiegazioni.

no, non puoi istanziare quella class usando quel costruttore. MA:

 struct A { template < typename T > A(T const&); }; 

Ora puoi.