C++ 馈送到std::stringstream,同时将其作为参数传递给函数c++;
我有以下功能C++ 馈送到std::stringstream,同时将其作为参数传递给函数c++;,c++,string,stringstream,ostream,temporary,C++,String,Stringstream,Ostream,Temporary,我有以下功能 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); } 但是我从编译器那
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);
}
但是我从编译器那里得到一个错误
no known conversion for argument 1 from 'std::basic_ostream<char>' to 'std::stringstream& {aka std::basic_stringstream<char>&}'
工作正常,但需要两行代码才能进行正确的调用)。我也愿意接受使操作符过载的解决方案,使您的pad()
获取并返回std::stringstream
,然后还添加以下内容:
template <typename T>
std::stringstream &
operator<<(std::stringstream &ss, const T &o) {
static_cast<std::ostream &>(ss) << o; // Prevent recursion.
return ss;
}
模板
std::stringstream&
操作员我认为问题出在这里。这将不起作用,因为ss的返回值为什么不生成一些简单的指令
类来进行格式化,并有各种构造函数(或潜在的子类)来处理必要的参数组合?为什么将push_back
调用放在一行上是“必要的”?是的,创建一个单独的类是可行的,只是想知道我是否可以使用标准库来实现它。我想在一行中调用push_
,因为我连续多次调用它,这使得代码看起来非常混乱。我尝试了push_-back(const std::stringstream&ss)代码>,它不起作用
Assembly outfile;
stringstream ss;
ss<<pad<<"addiu"<<"$sp, $sp, -8";
outfile.push_back(ss);
template <typename T>
std::stringstream &
operator<<(std::stringstream &ss, const T &o) {
static_cast<std::ostream &>(ss) << o; // Prevent recursion.
return ss;
}
void push_back(const std::stringstream& ss)
{
std::cout << "push: " << ss.str() << '\n';
}
int main(int, char* argv[])
{
std::stringstream ss;
// what gets sent to the function is an std::ostream&
// which is an incompatible type.
push_back(ss << "one " << 2 << ' ' << 3.0); // fail
}
template<typename DataType>
std::stringstream& operator<<(std::stringstream& ss, const DataType& data)
{
static_cast<std::ostream&>(ss) << data;
return ss;
}
void push_back(const std::stringstream& ss)
{
std::cout << "push: " << ss.str() << '\n';
}
int main(int, char* argv[])
{
std::stringstream ss;
// Now the << returns the correct type (std::stringstream&)
push_back(ss << "one " << 2 << ' ' << 3.0); // good
}