Ich habe folgende FunktionenFütterung std :: string und gleichzeitig als Argument an eine Funktion c vorbei ++
void Assembly::push_back(stringstream& ss){
instructions->push_back(ss.str());
}
std::ostream& pad(std::ostream& os) {
return os <<"\t"<<std::left<< std::setfill(' ') << std::setw(8);
}
wo instructions
ist eine Liste von Strings. Ich möchte etwas tun wie
Assembly outfile;
stringstream ss;
outfile.push_back(ss<<pad<<"addiu"<<"$sp, $sp, -8");
aber ich erhalte eine Fehlermeldung von dem Compiler
no known conversion for argument 1 from 'std::basic_ostream<char>' to 'std::stringstream& {aka std::basic_stringstream<char>&}'
Ich habe versucht, die Definition von push_back
Ändern std::basic_ostream<char>
zu nehmen, aber es immer noch nicht kompilieren.
Grundsätzlich, was ich tun möchte, ist in der Lage, push_back eine Zeichenfolge, die die Ausrichtung hat, die fügt. Es ist auch wichtig, dass ich bin in der Lage Assembly::push_back
in einer einzigen Zeile zu nennen (ich weiß, dass
Assembly outfile;
stringstream ss;
ss<<pad<<"addiu"<<"$sp, $sp, -8";
outfile.push_back(ss);
funktioniert, aber es zwei Zeilen Code erfordert den richtigen Anruf zu tätigen). Ich bin auch offen für Lösungen, die die operator<<
für Assembly
überlasten oder erlauben mir, das erforderliche Verhalten in einer einzigen Zeile zu erreichen.
Warum nicht einige einfache "Instruction" -Klasse, die die Formatierung tun, und hat verschiedene Konstruktoren (oder möglicherweise Unterklassen), um mit den notwendigen Kombinationen von Parametern umzugehen? –
Warum ist es so wichtig, dass der Push-back-Anruf in einer Zeile steht? –
Ja, eine separate Klasse zu erstellen wird funktionieren, ich frage mich nur, ob ich das mit der Standardbibliothek machen kann. – niko