如何在C++的函数中将其他变量作为args与std::ostream一起传递?
我正在研究一个看起来像这样的函数:
inline std::ostream& mvUp(int n,std::ostream& ss){
char u[8];
sprintf(u," 33[%dA",n);
ss<<u;
return ss;
}
并像这样使用它:
std::cout<<mvUp(1);
但是它显示错误:
std::cout<<mvUp(1);
| ^_____too few args in function call
^_______________no operator "<<" match these operands
我也尝试过:std::cout<<mvUp(1,std::cout);但仍然无法正常工作。
std::cout<<mvUp(1);
^_______________no operator "<<" match these operands
现在当我尝试制作模板时,
template <int n>
inline std::ostream& mvUp(std::ostream& ss){
char u[8];
sprintf(u," 33[%dA",n);
ss<<u;
return ss;
}
并使用它:std::cout<<mvUp<1>,这完全正常,但问题在于模板采用constargs。
无法弄清楚我哪里出错了。当我没有传递任何参数时,它在模板中如何工作?
回答
现代 C++ 代码使用std::string, 和其他类。这使得实现这种过载变得微不足道。
#include <string>
#include <sstream>
inline std::string mvUp(int n) {
std::ostringstream o;
o << " 33[" << n << "A";
return o.str();
}
然后,一切都会自动运行:
std::cout<<mvUp(1);
您的mvUp返回std::string,现有的<<重载负责其余的工作。
THE END
二维码