gpt4 book ai didi

c++ - ostream operator<< 调用父 ostream

转载 作者:行者123 更新时间:2023-11-28 00:07:23 27 4
gpt4 key购买 nike

代码:

cout << "11122333" << endl;

期待:
11122333\n
结果:
11122333\n
好的。
代码:

cout.operator<<("11122333");
cout.operator<<(endl);

期待:
11122333\n
结果:
00B273F8\n
(或其他一些地址,它被转换为 void* :( )

麻烦:想要写派生自 ostream 的类

class SomeStream : public ostream
{
public:
explicit SomeStream(streambuf* sb) : ostream(sb) { }
template <typename T> SomeStream &operator <<(const T &val)
{
std::ostream::operator<<(val); //Trouble in there!
std::cout << "<<" << " " << typeid(T).name() << " " << val << std::endl;
/*some other behavior*/
return *this;
}
SomeStream &operator <<(ostream& (*val) (ostream&))
{
std::ostream::operator<<(val);
/*some other behavior*/
return *this;
}
SomeStream &operator <<(ios_base& (*val) (ios_base&))
{
std::ostream::operator<<(val);
/*some other behavior*/
return *this;
}
};

当我调用父运营商时 std::ostream::operator<<(val); val 转换为 void*而不是正常工作。怎么做才对?以及为什么直接调用 operator<<对于 ostream工作方式与间接调用不同。

最佳答案

输出 operator <<对于 const char*不是 ostream 类型的成员. Only those重载是成员函数,其中之一用于 void* .还有non-member overloads .

有解决方法:

  template <typename T> SomeStream &operator <<(const T &val) 
{
static_cast<std::ostream&>(*this) << val; //Trouble in there!
std::cout << "<<" << " " << typeid(T).name() << " " << val << std::endl;
/*some other behavior*/
return *this;
}

关于c++ - ostream operator<< 调用父 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34766363/

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