Template If
-
template <class T> int foo (T x) { compile_time_if (is_same_type<T, MyClass> ) { return x.to_int (); } else { return int(x); } }
wie kann ich "compile_time_if" implementieren? is_same_type habe ich schon.
nur meldet der Compiler natürlich einen Fehler, wenn ich es mit normalen ifs mache, denn er schaut sich ja dann auch den Funktionsaufruf an (x.to_int()), und diese Funktion bietet kein int...
-
template<class T> int func(T t) { return static_cast<int>(t); } template<> int func<special_class>(special_class& sc) { return sc.get_int(); }
-
template<class T>
int func(T t)
{
return static_cast<int>(t);
}
template<>
int func<special_class>(special_class& sc)
{
return sc.get_int();
}Mal abgesehen davon,dass dies keine legale Spezialisierung ist:
Why Not Specialize Function Templates?
template <bool> struct Tag {}; template <> struct Tag<true> {}; template <class T> int fooimpl(T x, Tag<true> ) { ... } template <class T> int fooimpl(T x, Tag<false> ) { ... } template <class T> int foo (T x) { return fooimpl(x, Tag<is_same_type<T, MyClass>::Result> ); }
[ Dieser Beitrag wurde am 09.04.2003 um 08:03 Uhr von HumeSikkins editiert. ]
-
hm danke.