C++ 制作c+的最佳实践+;“类”;“可展示”;(字符串,ostream)
我有一个值语义类,我希望它是“可显示”的,与haskellC++ 制作c+的最佳实践+;“类”;“可展示”;(字符串,ostream),c++,c++11,c++14,C++,C++11,C++14,我有一个值语义类,我希望它是“可显示”的,与haskellShow类的含义相同,或者Python提供了一个通用的\uu str\uu()函数 在c++中: 我可以超载操作员问题将在几分钟内被搁置,但我仍将在这里分享我的想法 首先,我们可以从列表中删除const char*/std::string()运算符重载。如果类不是字符串,则它不应转换为字符串,并且序列化启用不会使类成为字符串 至于str(),to_string和操作符我不知道这是否是最佳做法,但 对于调试,我总是定义operatorie
Show
类的含义相同,或者Python提供了一个通用的\uu str\uu()
函数
在c++中:
- 我可以超载
操作员问题将在几分钟内被搁置,但我仍将在这里分享我的想法 首先,我们可以从列表中删除const char*/std::string()运算符重载。如果类不是字符串,则它不应转换为字符串,并且序列化启用不会使类成为字符串
至于
,str()
和to_string
操作符我不知道这是否是最佳做法,但
- 对于调试,我总是定义
operatories,我担心这个问题太公开了,但我还是敢。您使用
和str()
运算符的原因是什么?我猜您的意思是,优先于手动字符串连接之上的stringstream。在这种情况下,您可以选择to_string()
operator@StijnFrishert确切地很难用简单的字符串连接来序列化复杂的类。值得一提的是,有时候打印对象的方法不止一种(调试信息、格式化输出等)。似乎是反对转换运算符的另一个论点(“那么,您想要什么输出格式?”。
template<class T> struct make_writeable { friend std::ostream& operator<<(std::ostream& os, const T& t) { // example prefix... os << demangle(typeid(T).name()) << "{"; t.write(os); // example postfix: os << " }"; return os; } };
struct X : make_writeable<X> { void write(std::ostream& os) const { // write out members here. they will appear within the prefix and postfix } };
- 对于调试,我总是定义