aufrufen Ich versuche, eine Vorlagefunktion zu erstellen, die zwei verschiedene Implementierungen basierend auf einem Vorlageargument hat. Der erste ist spezifisch für I/O-Manipulatoren und der zweite ist für jeden allgemeinen Fall.Wie templated Typ mit
template <typename T>
typename std::enable_if<
std::is_same<decltype(std::setw), T>::value>::type
foo(T& t){
cout << "enabled" << std::endl;
}
template <typename T>
void foo(T& t){
cout << "Normal" << std::endl;
}
template <typename... Ts>
void foohelper(Ts... t){
foo(t...);
}
int main(){
foohelper(std::setprecision(3)); // It should print enabled, but printing Normal
}
Momentan tut es nicht, was ich versuche zu implementieren. Wie kann ich es reparieren?
std :: set und std :: setprecision sind nicht vom gleichen Typ (auch std :: setprecision (3) ist nicht der gleiche typ wie std :: setprecision) vielleicht, wenn Sie auf das Problem näher eingehen, können wir Ihnen geben eine Antwort! – bendervader
Ja, ich meinte std :: setw. Sie sind tatsächlich anders, siehe den Quelltext hier http://cs.brown.edu/~jwicks/libstdc++/html_user/iomanip-source.html Sie geben eine Struktur zurück, aber jede Struktur hat einen anderen Namen! Probieren Sie dies aus, um 'std :: cout << typeid (declltype (std :: setw)) zu bestätigen. Name() << std :: endl; std :: cout << typeid (dekltyp (std :: setprecision)). Name() << std :: endl; ' – bendervader