Templates
-
Mich plagen seit einiger zeit einige Fragen zu Templates:
was ist der unterschied zwischen template <typename T> und template <class T>
und wie kann ich templates einschränken?
zB möchte ich nur eine Funktion die T = Basisklasse oder etwas davon abgeleitetes behandeln kann schreiben
-
shisha schrieb:
was ist der unterschied zwischen template <typename T> und template <class T>
keiner.
shisha schrieb:
und wie kann ich templates einschränken?
zB möchte ich nur eine Funktion die T = Basisklasse oder etwas davon abgeleitetes behandeln kann schreibenCompilerfehler machen lassen, wenns nicht so ist.
Zum Beispiel einfach in den Destruktor deiner Templateklasse oder in deine Templatefunktion reinschreibseln: static_cast<T*> dummy=&t;Für abgedrehtere Spielchen SFINAE machen, aber manchmal ist weniger mehr.
-
#include <boost/utility/enable_if.hpp> #include <boost/type_traits/is_convertible.hpp> using boost::enable_if; using boost::is_convertible; class Base {}; template<class K> typename enable_if< is_convertible<K*,Base*>, void>::type funktion(K* zeiger) { // ... }Soooo schlimm/wild/unleserlich finde ich das gar nicht. Ich frage mich aber nach dem Sinn in diesem Fall. Warum sollte man ein Template so einschränken bzw warum muss die Funktion überhaupt ein Template sein?
Gruß,
SP