Ich habe eine Funktion, die im Moment einen Wert eines bestimmten Typs für mich zurückgeben kann. Es sieht aus wie diesesTemplateed Funktion Rückgabetyp zur Kompilierzeit keine Argumente
template<typename T>
T getNullValue(){
if(std::is_same<T,long long>::value){
return NULL_LONG;
}else if(std::is_same<T,double>::value){
return NULL_DOUBLE;
}
}
Dies funktioniert, aber ich mag es nicht zur Laufzeit der Lösung im Gegensatz Zeit zu kompilieren, aber dies ermöglicht es mir
double x = getNullValue<double>();
long long y = getNullValue<long long>();
zu tun Wie kann ich es machen, so dass ich kann Überlasten Sie einfach verschiedene Versionen von getNullValue, je nachdem, was ich zurückgeben möchte, ohne dass dies zur Laufzeit gelöst werden muss.
getNullValue<type i need>();
Bitte beachten Sie, dass dieser Code optimal ist, wenn er mit Optimierung kompiliert wird. Sie können zwar das Überladen der "eleganten" Vorlage vornehmen, aber es macht den Code komplizierter, als er sein sollte. –
Die einfache Antwort ist 'wenn conexpr' und nichts anderes muss sich ändern. – chris
sagst du, wenn ich "wenn consxpr (std :: is_same ....)" dann wird es zur Kompilierzeit aufgelöst? – flips