Rozważmy tę szczególną klasę kontenera, który przechowuje typy, które zawierają zarówno klucza i wartości wewnątrz niego, takSzablon z domyślnej wartości argumentu metody wskaźnika
template<typename K, typename T, K (T::*method)() const>
class Container
{
//...
};
K to rodzaj klucza, T jest typem wartości a wskaźnik metody służy do odzyskania klucza z wartości.
To działa dobrze, ale chciałbym zawierać domyślne wskaźnika metody tak, że gdy nie został określony przez rozmówcę byłoby operator K() const
tak:
template<typename K, typename T, K (T::*method)() const = &T::operator K const>
ale to nie skompilować podając tam to jest no member operator const K on A (<- my class I test this with)
, kiedy próbuję utworzyć instancję (i istnieje taka metoda). Czy jest nawet możliwa wartość domyślna argumentu szablonu wskaźnika metody? Jeśli tak, jaka jest prawidłowa składnia?
EDIT: W uzupełnieniu do roztworu poniżej znajduje się „naprawić” w przypadkach, gdy T jest wskaźnikiem, który wykorzystuje nową funkcję C++ 11 std::remove_pointer<T>::type
, więc:
template<typename K, typename T, K (std::remove_pointer<T>::type::*method)() const = &std::remove_pointer<T>::type::operator K>
Pomysł jest [dźwięk w zasadzie] (http://ideone.com/fgtF5y). Może to być po prostu poprawne wpisanie nazwy konkretnej funkcji (funkcji konwersji). –
[Tam] (http://ideone.com/k1bCEJ), może usunąć 'const'? –
'operator K const' (==' operator const K') byłby funkcją konwersji do, no, 'const K'. –