是否可以通过以下所有方式重载自定义类的<<操作符:
CustomClass customClass;
std::shared_ptr<CustomClass> sharedPointer(customClass);
os << customClass;
os << sharedPointer;
或者至少以下工作有效:
os << sharedPointer.get();
默认情况下,使用通用技术使operator
重载,只有以下两个选项有效:
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
所需:
第二个或第三个输出也应为“自定义类文字”
答案 0 :(得分:2)
在所有情况下都将执行自定义类<<运算符重载,并且在所有情况下都将得到os << customClass的结果,而不是在指针类的情况下得到指针地址
这是我要怎么做:
$data = [
0 => 'title',
1 => 'featured',
2 => 'content',
3 => 'category_id',
4 => 'slug'
];
$columns = "'".implode("','",$data)."'";
$res = Component::select(DB::raw("CONCAT($columns) AS Alias"))->get();
输出
#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;
}
查看live example。