gpt4 book ai didi

c++ - 如何正确实现C++流操纵器endl?

转载 作者:行者123 更新时间:2023-11-30 00:45:44 25 4
gpt4 key购买 nike

我正在尝试为我的 stream 实现一个操纵器类(class)。我对操纵器了解不多,但我认为我做的一切都是对的。代码的相关部分如下:

class stream
{
public:
stream& operator<<(bool b) { // send bool value and return *this; }
stream& operator<<(const char str[]) { // send string and return *this }
};

inline stream& endl(stream& s)
{
return s << "\r\n";
}


class stream stream;

int main()
{
stream << endl;
}

我不知道我做错了什么,但我没有调用 endl编译器正在调用 stream::operator<<(bool) .有什么想法吗?

最佳答案

看到stream << endl;编译器必须从 operator << 中选择一个重载你提供的。 endl不可转换为 const char * , 但它可以转换为 bool , 所以这就是你得到的。

你可能想添加一个重载

stream& operator<<(stream &(*function)(stream &)) {
return function(*this);
}

class stream 内部正确处理函数指针。

关于c++ - 如何正确实现C++流操纵器endl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143460/

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