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 定义中存在一些语法错误(也许这只是为了示例目的?)。