C++实现方式:myInstance << "abc" << someInt << std::endl
C++ How to implement: myInstance << "abc" << someInt << std::endl
我在 C++ 中有我的自定义 class:
Class MyClass
{
private std::ofstream logfile("D:\my.txt",std::ios_base::app);
}
我希望能够写出以下内容:
MyClass *my = new MyClass();
int a = 3;
my << "Hello World1" << a << std::endl;
my << L"Hello World2" << a << std::endl;
结果应该是所有内容都将保存(重定向)到名为 "logfile".
的私有流(文件)中
可能吗?
我试图使用 cca 这个,但没有成功:
https://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm
你可以这样使用:
class MyClass
{
public:
MyClass() : logfile("logfile.log", std::ios::app) {}
template<typename T>
friend MyClass& operator<<(MyClass& obj, const T& data);
private:
std::ofstream logfile;
};
template<typename T>
MyClass& operator<<(MyClass& obj, const T& data) {
obj.logfile << data;
return obj;
}
int main() {
MyClass obj;
obj << "Hello\n";
obj << 123 << " World\n";
}
模板化运算符 << 接受编译的所有内容并将其重定向到 MyClass 对象内的 ofstream。
<< 运算符必须声明为 MyClass 的友元,因为它是在其外部定义的,并且必须能够访问私有日志文件对象。
如评论中所述,如果您通过指针访问 MyClass 对象,则需要在使用 << 运算符之前取消引用它:
MyClass *obj = new MyClass;
*obj << "Hello\n";
*obj << 123 << " World\n";
无论如何,您的 class 定义中存在一些语法错误(也许这只是为了示例目的?)。
我在 C++ 中有我的自定义 class:
Class MyClass
{
private std::ofstream logfile("D:\my.txt",std::ios_base::app);
}
我希望能够写出以下内容:
MyClass *my = new MyClass();
int a = 3;
my << "Hello World1" << a << std::endl;
my << L"Hello World2" << a << std::endl;
结果应该是所有内容都将保存(重定向)到名为 "logfile".
的私有流(文件)中可能吗? 我试图使用 cca 这个,但没有成功: https://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm
你可以这样使用:
class MyClass
{
public:
MyClass() : logfile("logfile.log", std::ios::app) {}
template<typename T>
friend MyClass& operator<<(MyClass& obj, const T& data);
private:
std::ofstream logfile;
};
template<typename T>
MyClass& operator<<(MyClass& obj, const T& data) {
obj.logfile << data;
return obj;
}
int main() {
MyClass obj;
obj << "Hello\n";
obj << 123 << " World\n";
}
模板化运算符 << 接受编译的所有内容并将其重定向到 MyClass 对象内的 ofstream。 << 运算符必须声明为 MyClass 的友元,因为它是在其外部定义的,并且必须能够访问私有日志文件对象。
如评论中所述,如果您通过指针访问 MyClass 对象,则需要在使用 << 运算符之前取消引用它:
MyClass *obj = new MyClass;
*obj << "Hello\n";
*obj << 123 << " World\n";
无论如何,您的 class 定义中存在一些语法错误(也许这只是为了示例目的?)。