gpt4 book ai didi

c++ - 运算符 << 在构造函数中重载

转载 作者:太空宇宙 更新时间:2023-11-04 14:54:47 24 4
gpt4 key购买 nike

我正在调试一个程序,我想从那个模式打印:

 std::cout << firstVar << ", " << secondVar << ", " << thirdVar << endl ;

更短,也就是说,如果我们编写代码,应该会发生同样的事情:

shortPrint(std::cout) << firstVar << secondVar << thirdVar;

注意:变量数量没有限制,可以是1个也可以是20个,这样应该也可以:

shortPrint(std::cout) << firstVar << secondVar << thirdVar << anotherVar << oneMoreVar;

有人告诉我,最简单的方法是创建名为“shortPrint”的类。

谁能帮我解决这个问题?

首先,我会说我只需要实现构造函数和运算符 << 重载,但我不确定在那种情况下该怎么做。

最佳答案

是的,使用适当的重载运算符创建一个 shortPrint 类。像这样:

class shortPrint {
ostream &o;
public:
shortPrint(ostream &o) : o(o) {}
template <typename T> shortPrint &operator<<(const T &t) {
o << t << ',';
return *this;
}
// support for endl, which is not a value but a function (stream->stream)
shortPrint &operator<<(ostream& (*pf)(std::ostream&)) {
o << pf;
return *this;
}
};

这应该可以(基本上)。

要消除多余逗号的问题,请使用:

class shortPrint {
class shortPrint2{
shortPrint &s;
public:
shortPrint2(shortPrint &s) : s(s) {}
template <typename T> shortPrint2 &operator<<(const T &t) {
s.o << ',' << t ;
return *this;
}
shortPrint &operator<<(ostream& (*pf)(std::ostream&)) {
s.o << pf;
return s;
}
};
ostream &o;
shortPrint2 s2;
public:
shortPrint(ostream &o) : o(o), s2(*this) {}
template <typename T> shortPrint2 &operator<<(const T &t) {
o << t;
return s2;
}
shortPrint &operator<<(ostream& (*pf)(std::ostream&)) {
o << pf;
return *this;
}
};

关于c++ - 运算符 << 在构造函数中重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21304532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com