template: Basistyp für Zeiger
-
Hallo
Ich habe in etwa sowas:
template <typename T> class foo { }; template <typename T> class foo<T*> { std::auto_ptr<typeof(&T)> bar(); }Ich will praktisch für Templates mit Zeigern eine überladung bauen, die dann aut_ptr s verwendet und brauche dafür den BasisTyp.
Gibt's da eine Möglichkeit ohne 2. Template Parameter?
-
Warum nicht einfach
std::auto_ptr<T> bar();???
Oder willst du von einer abgeleiteten Klasse die Basisklasse ermitteln? Das geht leider nicht direkt.
-
Wenn ich
foo<int*> habe, dann ist T ja int* und auto_ptr<int*> ist nunmal nicht das gleiche wie auto_ptr<int>
-
Hi,
das dürfte dir helfen: http://www.boost.org/doc/html/boost_typetraits/reference.html#boost_typetraits.remove_pointer
template <typename T> class foo<T*> { typedef typename boost::remove_pointer<T>::type T1 std::auto_ptr<T1> bar; }
-
Wenn du
template <typename T> class foo<T*> { std::auto_ptr<T> bar(); }hast und schreibst foo<int *>, dann ist T innerhalb von dem spezialisierten foo nur "int", nicht "int *"!!!
-
~template schrieb:
Wenn du
template <typename T> class foo<T*> { std::auto_ptr<T> bar(); }hast und schreibst foo<int *>, dann ist T innerhalb von dem spezialisierten foo nur "int", nicht "int *"!!!
Das stimmt anscheinend. Wusste ich gar nicht, muss auch zu meiner Verteidigung sagen, dass ich damit zum ersten Mal konfrontiert wurde
...
-
Wenn dem natürlich so ist

Man lernt nie aus