重载<<并定义流操纵器 C++

overloading the << and defining a stream manipulator c++

本文关键字:lt C++ 操纵 重载 定义      更新时间:2023-10-16

我希望有人能就我遇到的一个特殊问题提供一些见解。我正在编写一个程序,它接受整数,将它们存储在一个向量中,并将大于999 -> 1,000的数字用逗号分隔符打印出来。

我的问题是……嗯,实际上,第二,我如何将一个向量传递给一个函数,第二,如果我想重载<<在幕后做这一切可能吗?

类的全局函数,逗号:

template <class T>
string formatWithComma(T value){
    stringstream ss;
    locale commaLoc(locale(), new CommaNumPunc() );
    ss.imbue(commaLoc);
    ss << value;
    return ss.str();
main()中的

循环显示vector:

for (vector<unsigned int>::iterator i = integers.begin(); i != integers.end(); ++i){
    cout << formatWithComma(*i) << "  ";
}

将vector传递给函数可以这样做:

void foo(std::vector<T> &vector);
void foo(const std::vector<T> &vector);

通常需要传递(const)引用以避免复制vector

第一个问题

如何将向量传递给函数

直接传递即可。例如(假设函数模板):

template <typename T>
void processVector(const vector<T>& vec );
在main中,你可以这样调用

processVector<unsigned int> (integers); //an example instantiation

第二个问题:

如果我想重载<<在幕后做这一切可能吗?

是的,当然可能。看看如何重载<<操作符从这些资源:MSDN过载<<操作员和重载<<运营商有关

和SO中的一堆资源:如何正确重载<<操作符