如何在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,现有的<<重载负责其余的工作。


以上是如何在C++的函数中将其他变量作为args与std::ostream一起传递?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>