c++;函数重载,使fwrite/fread的行为类似于PHP版本 我习惯了PHPFrd/FADAD参数的顺序,我想让它们在C++中是相同的 也是

c++;函数重载,使fwrite/fread的行为类似于PHP版本 我习惯了PHPFrd/FADAD参数的顺序,我想让它们在C++中是相同的 也是,c++,windows,overloading,C++,Windows,Overloading,我希望它能够处理char和string类型,以及我放入其中的任何数据类型(只有在定义了length的情况下) 我是C++的总NOOB,这是我至今所做的: 编辑:修复了std::string和buf size_t fwrite(FILE *fp, const std::string &buf, const size_t len = SIZE_MAX){ if(len == SIZE_MAX){ return fwrite(buf.c_str(), 1, buf.le

我希望它能够处理char和string类型,以及我放入其中的任何数据类型(只有在定义了length的情况下)

<>我是C++的总NOOB,这是我至今所做的: 编辑:修复了std::string和buf

size_t fwrite(FILE *fp, const std::string &buf, const size_t len = SIZE_MAX){
    if(len == SIZE_MAX){
        return fwrite(buf.c_str(), 1, buf.length(), fp);
    }else{
        return fwrite(buf.c_str(), 1, len, fp);
    }
}

size_t fwrite(FILE *fp, const void *buf, const size_t len = SIZE_MAX){
    if(len == SIZE_MAX){
        return fwrite((const char *)buf, 1, strlen((const char *)buf), fp);
    }else{
        return fwrite(buf, 1, len, fp);
    }
}

这样行吗?如果我想以绝对最好的方式写入文件,该如何实现呢?

如果您想以最好的方式写入文件,应该使用std::iostreams。手动处理缓冲区的长度会导致问题

另外,顶部重载应该采用const std::string&,而不是const std::string


但是,我没有看到任何实际的bug。

如果您想以最好的方式写入文件,应该使用std::iostreams。手动处理缓冲区的长度会导致问题

另外,顶部重载应该采用const std::string&,而不是const std::string


但是,我没有看到任何实际的bug。

fwrite/fread对对象的处理不是很好;所以正如@DeadMG所说,你最好使用streams

比如:

cout << str << endl;

coutfwrite/fread不能很好地处理对象;所以正如@DeadMG所说,你最好使用streams

比如:

cout << str << endl;

你能解释一下,当我不使用“std::string&buf”时,它会导致什么缺点/问题吗?似乎没有它也能工作。如果你错过了&你会导致对象的副本,这在CPU和内存方面可能会很昂贵。它就像一个指针,只是编译器处理所有的算术。你能解释一下当我不使用“std::string&buf”时它会导致什么缺点/问题吗?如果没有它的话,你就会产生一个复制对象,它在CPU和内存方面可能很昂贵。它就像一个指针,除了编译器处理所有的算术。最好的方法是使用C++而不是试图重新创建PHP。重新定义标准函数以获取不同的参数是错误和混乱的秘诀。最好的方法是使用C++而不是试图重建PHP。重新定义标准函数以接受不同的参数会导致错误和混乱。