std::is_integral und std::enable_if
-
Eine Klasse von mir nimmt einen Templateparameter. Ich möchte, das nur integrale Typen akzeptiert werden und ansonsten der Compiler schreit.
#pragma once #include <cstdlib> #include <initializer_list> #include <type_traits> template <typename T> typename std::enable_if<std::is_integral<T>::value, void>::type class Vector { public: explicit Vector(std::size_t size) : m_size(size) {} Vector(const std::initializer_list<T> args) {} };Nur wie genau mache ich das syntaktisch?
-
siehe http://www.boost.org/doc/libs/1_55_0/libs/utility/enable_if.html Absatz: "3.2 Enabling template class specializations"
-
Ganz anders. Dafür nutzt man
static_assert. Das sollte dein Compiler bereitstellen, da du ja auchinitializer_listverwendest.template <typename T> class Vector { public: static_assert( std::is_integral<T>::value, "Fehlermeldung" ); .... };enable_ifwürde man bei Klassentemplates eher für partielle Spezialisierungen einsetzen.Edit: P.S.:
enable_if's zweiter Template-Parameter hat schonvoidals Default-Argument.