2012-12-24 6 views
8

So che in C++ possiamo fare questo:Come posso assegnare argomenti modello a un oggetto creato in linea con la sua classe?

class A {} a; 

Questo rende un oggetto di tipo A nome a. È equivalente a:

A a; 

Mi chiedevo come avrei fatto questo con i modelli. Ad esempio:

template <typename T> struct N {} <int> n; 

Questo non viene compilato, ma si ottiene l'idea. Come dovrei specificare gli argomenti del template su un oggetto creato in linea con la sua definizione di classe? È possibile?

+0

Io non v'è una sintassi che consente todo che. Sebbene tu possa essere in grado di fare la specializzazione dei modelli e la creazione di oggetti in modo originale. – dchhetri

risposta

2

La roba dopo la chiusura } è chiamato un init-declarator-list secondo lo standard.

14.3 vieta esplicitamente loro di essere utilizzati in dichiarazioni di classe template:

In a template-declaration, explicit specialization, or explicit instantiation the init-declarator-list in the dec- laration shall contain at most one declarator. When such a declaration is used to declare a class template, no declarator is permitted.

+0

Ho appena segnalato un bug di clang basato su questa risposta, perché rifiuta 'template <> struct A {} lulz;'. –

1

Non penso che tu possa farlo. La forma che hai menzionato, per le strutture e le classi, è mantenuta, da quanto ho capito, per la compatibilità a ritroso con c - dove potresti farlo per le strutture.
Bella idea, però :)

1

Non è possibile dichiarare variabili da una definizione di modello, nemmeno se tutti gli argomenti del modello hanno valori predefiniti.

Anche questo è un errore:

template <typename T = int> struct N {} n;