Sto usando xsd per creare codice C++ da un file di schema xml. Per un tipo xml vengono create più funzioni (per la serializzazione, ecc.).
Se il tipo è chiamato XmlType sono creati molteplici funzioni della forma seguente:più funzioni con lo stesso nome ma diversi tipi di argomenti come parametro di modello
XmlType XmlType_(const XmlType& a, const string& b)
string XmlType_(const XmlType& a)
...
Questo sono le normali funzioni e non membri del XmlType e tutti hanno lo stesso nome. Per XmlType2 le funzioni si chiamerebbero XmlType2_.
Vorrei scrivere una classe modello di utilità per tutti i diversi tipi xml del mio schema xml. Le diverse funzioni verranno chiamate intuizione in questa classe. Quello che ho finora è qualcosa di simile:
template<typename T>
using TFunc1 = T (*)(const T&, const string&);
template<typename T>
using TFunc2 = string (*)(const T&);
template<typename T, TFunc1<T> func2, TFunc2<T> func2>
class XmlUtil {
...
};
Quando creare un'istanza della XmlUtil classe se hanno a che fare in questo modo:
XmlUtil<XmlType, XmlType_, XmlType_> util;
Questo si sente un po 'ridondante e peggiora , quando devo passare più funzioni come parametri.
Vorrei utilizzare la classe util in questo modo:
XmlUtil<XmlType, XmlType_> util;
o meglio ancora come questo
XmlUtil<XmlType> util;
L'unico modo che posso pensare è usare in qualche modo definire, ma doesn non mi sembra giusto
C'è un altro modo per farlo?
EDIT: sto usando un definiscono ora:
#define TRPL(name) name, name ## _, name ## _
...
XmlUtil<TRPL(XmlType)> util;
Io modificare questo, se trovo qualcosa di meglio (forse ignorare set come Yakk suggerito nella sua risposta).
Questo è specifico per C++ 11, credo? –
Sì, sto usando C++ 11 (MinGW con gcc 4.8). Aggiunto il tag. Specializzazione modello – guini
. Fatto un equivalente di Func <> (in C#) in C++ utilizzandolo in cui Execute aveva un'implementazione specifica del parametro template e un conteggio degli argomenti. Utilizzando le impostazioni predefinite nel modello, è possibile scegliere di definire solo alcuni degli argomenti del tipo. –