有一个C++;类的行为类似于自定义的ostream、sstream 我有一个C++类 MyObjult,我希望能够像OSFATH一样把这些数据馈送(但不像直接的SsFr流,输入数据是以特殊方式格式化的)。我似乎不知道如何重载运算符,使MyObject接受给定给它的输入 class MyObject { public: ostringstream s; FEEDME }; int main() { MyObject obj; obj.FEEDME << "Hello" << 12345; // I want obj.s == ":Hello::12345:" } 类MyObject{ 公众: Ostringstreams; 喂我 }; int main(){ 肌体; obj.FEEDME
您可能会找到有用的答案。试试以下方法:有一个C++;类的行为类似于自定义的ostream、sstream 我有一个C++类 MyObjult,我希望能够像OSFATH一样把这些数据馈送(但不像直接的SsFr流,输入数据是以特殊方式格式化的)。我似乎不知道如何重载运算符,使MyObject接受给定给它的输入 class MyObject { public: ostringstream s; FEEDME }; int main() { MyObject obj; obj.FEEDME << "Hello" << 12345; // I want obj.s == ":Hello::12345:" } 类MyObject{ 公众: Ostringstreams; 喂我 }; int main(){ 肌体; obj.FEEDME,c++,operator-overloading,ostream,sstream,C++,Operator Overloading,Ostream,Sstream,您可能会找到有用的答案。试试以下方法: class MyObject { public: template <class T> MyObject &operator<<(const T &x) { s << ':' << x << ':'; return *this; } std::string to_string() const { return s.s
class MyObject {
public:
template <class T>
MyObject &operator<<(const T &x) {
s << ':' << x << ':';
return *this;
}
std::string to_string() const { return s.str(); }
private:
std::ostringstream s;
};
MyObject obj;
obj << "Hello" << 12345;
std::cout << obj.to_string() << std::endl;
类MyObject{
公众:
模板
MyObject&operator我将采用稍微不同的方法创建格式化程序对象。
当格式化程序对象应用于流时,它将处理格式化字符的插入
#include <iostream>
template<typename T>
class Format
{
public:
Format(T const& d):m_data(d) {}
private:
template<typename Y>
friend std::ostream& operator<<(std::ostream& str,Format<Y> const& data);
T const& m_data;
};
template<typename T>
Format<T> make_Format(T const& data) {return Format<T>(data);}
template<typename T>
std::ostream& operator<<(std::ostream& str,Format<T> const& data)
{
str << ":" << data.m_data << ":";
}
int main()
{
std::cout << make_Format("Hello") << make_Format(123);
}
#包括
模板
类格式
{
公众:
格式(T常量和d):m_数据(d){}
私人:
模板
friend std::ostream&OperatorTanks,我想我现在已经知道如何实现它了,但仍然得到一个错误“error:invalid use of member(你忘了“&”?”)”对于MyObject&Operator,我认为在g++4.3.3中编译得很好,编译器使用的是什么?g++(GCC)4.3.2,您说得对。它的编译和工作方式与我所希望的完全相同!谢谢。问题似乎是我的程序所特有的。