considerare questa classe contenitore speciale che memorizza tipi che contengono sia chiave e il valore al suo interno, cosìModello con valore predefinito dell'argomento metodo puntatore
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
K è il tipo di una chiave, T è un tipo di valore e il puntatore del metodo viene utilizzato per recuperare la chiave dal valore.
Funziona benissimo, ma vorrei includere un valore predefinito per il puntatore metodo in modo che, quando non è stato specificato dal chiamante sarebbe operator K() const
in questo modo:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
ma questo non può essere compilato indicando lì è no member operator const K on A (<- my class I test this with)
quando provo a istanziarlo (e c'è un tale metodo). È persino possibile avere il valore predefinito di un argomento del modello del puntatore del metodo? Se sì, qual è la sintassi corretta?
EDIT: Oltre alla soluzione sotto c'è un "fissare" per i casi in cui T è un puntatore che utilizza la nuova C++ 11 caratteristica std::remove_pointer<T>::type
, quindi:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
L'idea è [suono in linea di principio] (http://ideone.com/fgtF5y). Potrebbe essere solo una questione di ortografia del nome della particolare funzione (la funzione di conversione) correttamente. –
[There] (http://ideone.com/k1bCEJ), forse rimuovere 'const'? –
'operatore K const' (==' operatore const K') sarebbe una funzione di conversione in, beh, 'const K'. –