C++11-Code nach C++03 umschreiben



  • Hi, wie kann ich den folgenden Code in C++03 formulieren?

    template<typename integral_t, typename = typename std::enable_if<std::is_integral<integral_t>::value>::type>
    bool f(integral_t value)
    {
    	...
    }
    

    Ich brauche das weil ich den Code auf einem alten Compiler zum Laufen bringen muss.
    Bisher hab ich:

    template<bool condition, typename t = void>
    struct enable_if;
    template<typename t>
    struct enable_if<true, t>
    {
    	typedef t type;
    };
    
    template<typename lhs, typename rhs>
    struct same
    {
    	static const bool value = false;
    };
    template<typename t>
    struct same<t, t>
    {
    	static const bool value = true;
    };
    
    template<typename t>
    struct is_integral
    {
    	static const bool value = same<t, bool>::value || ... ;
    };
    

    Wie ich das aber so in den Code der Funktion bauen soll ist mir schleierhaft.


  • Mod

    template<typename T>
    typename std::enable_if<std::is_integral<T>::value, bool>::type f(T value);
    // oder
    template<typename T>
    bool f(T value, typename std::enable_if<std::is_integral<T>::value>::type* = 0);
    

    Ersteres ist nach Möglichkeit vorzuziehen, Letzteres ist die einzige Möglichkeit bei Konstruktoren.



  • Danke. 👍


Log in to reply