【发布时间】:2021-07-16 02:30:25
【问题描述】:
我正在研究一个看起来像这样的函数:
inline std::ostream& mvUp(int n,std::ostream& ss){
char u[8];
sprintf(u,"\033[%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,"\033[%dA",n);
ss<<u;
return ss;
}
并使用它:std::cout<<mvUp<1>,这完全可以正常工作,但问题是模板采用 const args。
无法弄清楚我哪里出错了。当我不传递任何参数时,它在模板中是如何工作的?
【问题讨论】:
-
你为什么要混合
<<和函数?为什么不只是mvUp(1,std::cout);?std::cout可以接受mvUp<1>是的函数指针,这就是它编译的原因。 -
我想编写一个函数,将某些内容输出到传入的 ostream 中,然后返回该流。我不确定这是否正确。
标签: c++ c++11 templates ansi ostream