Variadic Templates benutzen, aber nur die Typen sind gegeben



  • Folgendes Problem: Ich will mit Variadic Templates arbeiten unter der Einschränkung, dass nur die Typen aber keine Values dazu gegeben sind. Als C++ Code versteht man vielleicht besser was ich will.

    //Nicht kompilierendes Beispiel
    struct Blob {
    
    	static int XYZ() {
    
    		return 1;
    
    	}
    
    };
    
    std::uint32_t getXYZs() {
    
    	return 0;
    
    }
    
    template<typename T, typename... Args>
    std::uint32_t getXYZs() {
    
    	return T::XYZ() + getXYZs<Args...>();
    
    }
    
    int main(){
    
    getXYZs<Blob, Blob, Blob, Blob, Blob>();
    
    }
    

    Zumindest Visual C++ 2015 akzeptiert das (wohl auch zurecht) nicht. Wie kann man erreichen was ich will?


  • Mod

    template<typename T> std::uint32_t getXYZs() {
    
        return T::XYZ();
    
    }
    
    template<typename T1, typename T2, typename... Args>
    std::uint32_t getXYZs() {
    
        return T1::XYZ() + getXYZs<T2, Args...>();
    
    }
    

    Schönheitsfehler: Geht nicht mit 0 Argumenten. Wäre das wichtig?



  • Ah Danke, das passt so perfekt.


Anmelden zum Antworten