如果我的问题令人困惑,我的意思是:
在java中,如果你是System.out.println(类),它将默认为toString函数并打印那里指定的内容。我想知道我是否可以在C ++中做类似的事情。我也应该提一下,我不太擅长c ++,所以我的示例代码中可能有很多错误。
class thing {
private:
char *foo;
public:
thing(){ foo="asd"; }
char* getString(){ return foo; }
friend ostream& operator<<(ostream &out, thing &abc);
};
template<typename T>
ostream& operator<<(ostream &out, T &abc){
out<<abc.getString();
return out; }
int main(){
thing test;
cout<<test;
return 0; }
我试图通过几种方式做到这一点,我总是会遇到某种错误。
答案 0 :(得分:2)
基本想法没问题。虽然,可以说,你只是简单地将依赖性转移到了&lt;&lt;&lt;&lt;&lt;&lt;&lt;拥有getString()
成员的过载。但是你应该通过const-ref传递。此外,getString()应该是const。
答案 1 :(得分:1)
这是您的代码的工作版本,结合@Mooing Duck的SFINAE检查
#include <iostream>
#include <ostream>
using namespace std;
class thing {
private:
const char *foo;
public:
thing(){ foo="asd"; }
const char* getString() const { return foo; }
};
template<typename T, class = decltype(std::cout<<std::declval<T>().getString())>
ostream& operator<<(ostream &out, T const &abc){
out<<abc.getString();
return out;
}
int main(){
thing test;
cout<<test << 3;
return 0;
}