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.


Anmelden zum Antworten