gpt4 book ai didi

c++ - 为指针/共享指针和其他类型重载流 << 运算符

转载 作者:太空狗 更新时间:2023-10-29 21:32:12 25 4
gpt4 key购买 nike

是否可以重载自定义类的 << 运算符,使其能够满足以下所有条件:

CustomClass customClass;
std::shared_ptr<CustomClass> sharedPointer(customClass);

os << customClass;
os << sharedPointer;

或者至少以下工作:

os << sharedPointer.get();

默认情况下,使用通用技术重载 operator , 只有以下 2 个选项有效:

os << customClass;
os << *sharedPointer.get();

编辑

这里的“工作”意味着,在所有情况下,自定义类 <<运算符重载被执行,我得到了 os << customClass 的结果在所有情况下代替指针类的指针地址

示例

代码:

os << customClass;
os << sharedPointer;
os << sharedPointer.get();
os << *sharedPointer.get();

输出:

Custom class text
00000244125655C0
00000244125655C0
Custom class text

期望:

第二个或第三个输出也应该是“自定义类文本”

最佳答案

that in all cases the custom classes << operator overload is executed and that I get the result of os << customClass in all cases instead of pointer addresses in the case of the pointer classes

这是我的做法:

#include <iostream>
#include <string>
#include <memory>

class MyClass {
std::string s;

friend std::ostream& operator<<(std::ostream& os, const MyClass& c) {
os << c.s;
return os;
}

public:
MyClass(const std::string& s_) : s(s_) {}
};

template<typename T>
std::ostream& operator<<(std::ostream& os, const std::shared_ptr<T>& pc) {
os << pc.get() << " " << *pc;
return os;
}


int main() {
std::shared_ptr<MyClass> pc = std::make_shared<MyClass>("Hello");
std::cout << pc << std::endl;
}

输出

0x20f5c30 Hello

查看 live example .

关于c++ - 为指针/共享指针和其他类型重载流 << 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55843880/

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