Template Typen einschränken
-
Hallo,
ist es möglich, Typen einzuschränken?
Folgendes Beispiel:
template<class T> struct eineKlasse{T member;};Nun möchte ich, dass T zum Beispiel nur int oder char sein darf.
Wie bekomm ich das in C++ hin?
-
Wieso musst du das hinbekommen?
-
c++ templates schrieb:
Hallo,
ist es möglich, Typen einzuschränken?
Folgendes Beispiel:
template<class T> struct eineKlasse{T member;};Nun möchte ich, dass T zum Beispiel nur int oder char sein darf.
Wie bekomm ich das in C++ hin?Bspw.
static_assert. Aber ob das Design so sinnvoll ist, ist eine ganz andere Frage...
-
Zum Beispiel
#include <iostream> #include <cstdlib> using namespace std; template<typename T> struct TestCharOrInt; template<> struct TestCharOrInt<char> { }; template<> struct TestCharOrInt<int> { }; template<class T> struct eineKlasse:TestCharOrInt<T> { T member; }; int main() { eineKlasse<char> ch; eineKlasse<int> i; eineKlasse<double> d; }
-
Stichworte: Spezialisierung, enable_if.
Elegante Lösung mit C++11 variadic templates.
template <class T, class... Candidates> struct is_one_of; template <class T, class U, class... Candidates> struct is_one_of<T, U, Candidates...> : is_one_of<T, Candidates...> {}; template <class T, class... Candidates> struct is_one_of<T, T, Candidates...> : std::true_type {}; template <class T> struct is_one_of<T> : std::false_type {}; template<class T> struct eineKlasse { static_assert(is_one_of<T, int, char>::value, "Wrong type!"); T member; };