C++ 我可以制作一个模板操作符吗<&书信电报;所有类都可以使用的重载?C++;
如果我的问题令人困惑,我的基本意思是: 在java中,如果您使用System.out.println(类),它将默认为toString函数,并打印其中指定的内容。我想知道我是否可以在C++中做类似的事情。我也应该提到我不太擅长C++,所以在我的示例代码中可能有很多错误。C++ 我可以制作一个模板操作符吗<&书信电报;所有类都可以使用的重载?C++;,c++,templates,operator-overloading,C++,Templates,Operator Overloading,如果我的问题令人困惑,我的基本意思是: 在java中,如果您使用System.out.println(类),它将默认为toString函数,并打印其中指定的内容。我想知道我是否可以在C++中做类似的事情。我也应该提到我不太擅长C++,所以在我的示例代码中可能有很多错误。 class thing { private: char *foo; public: thing(){ foo="asd"; } 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; }
类的东西{
私人:
char*foo;
公众:
thing(){foo=“asd”;}
char*getString(){return foo;}
friend ostream&operator基本思想还可以。不过,可以说您只是简单地将依赖性从代码的工作版本转移到了,再加上@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;
}
#包括
#包括
使用名称空间std;
阶级事务{
私人:
const char*foo;
公众:
thing(){foo=“asd”;}
常量char*getString()常量{return foo;}
};
模板thing test()
至少是请输入的!为什么您同时拥有getString
和操作符?看起来您正在尝试替换。此外,使用std::string to_string(const my_class_type&)更为正常< /C>作为一个自由函数。它们被添加到标准C++中。通过const REF可以消除错误吗?我会返回常量还是让函数常量?你的代码编译给我(虽然有一个字符串字符串警告)当我删除friend decl时。这比模板更可取。如果希望它对const对象起作用,则需要传递const ref。在这种情况下,getString也需要是const。现在应该添加const
@MooingDuck happy?为什么getString()需要两个重载?@user3521733它不是必需的。@user3521733为什么?enable_如果
需要一个bool
值条件,你想要什么条件?除非你想创建一个助手类有\u getstring