将指向文件缓冲区的指针传递给 class,期望从 class 中的文件读取

Pass a pointer to a file buffer to a class, expecting to read from file inside a class

我想学习如何通过将流的指针传递给 class 在文件中进行搜索。

我可以使用 std::fstreamstd::filebuf*

成功地从文件中获取第一个字符
char symbol;
std::fstream by_fstream;
by_fstream.open("First_test_input.txt");

std::filebuf* input_buffer = by_fstream.rdbuf();
symbol = input_buffer -> sbumpc();

std::cout << "\nSymbol that get from a file by rdbuf(): " << symbol;

输出:Symbol that get from a file by rdbuf(): M

但我不确定如何将任何指向文件原始流的指针从 main 发送到 class。

理想情况下,做这样的事情会很棒:

#include <iostream>
#include <fstream>

class from_file
{
public:
    
    char c;
    
    from_file () {
        std::cout << "\nCharacter that get from file by to class variable"
                    <<" then printed: " << c;
    };

    from_file (char *pointer){
        c = pointer -> sbumpc();
    };

    ~from_file ();
    
};

int main(){

    std::fstream by_fstream;
    by_fstream.open("First_test_input.txt");


    std::filebuf* input_buffer = by_fstream.rdbuf();
    from_file send(&input_buffer);
    from_file show;

    return 0;

}

正在寻找关于在哪里可以找到类似的文档的建议 headers 来完成这样的任务。

你的做法全错了。

首先,您应该传递(引用)流本身,而不是其内部缓冲区。使用 std::istream 方法,如 read()get()operator>> 从流中读取,让它为您处理自己的缓冲区。

其次,您正在尝试让第二个完全独立的对象“神奇地”知道前一个对象持有什么。这也不会如你所愿。

尝试更像这样的东西:

#include <iostream>
#include <fstream>

class from_stream
{
public:
    
    char c;
    
    from_stream (std::istream &in){
        c = in.get();
        // or: in.get(c);
        // or: in.read(&c, 1);
        // or: in >> c;
    };

    void show() const {
        std::cout << "\nCharacter that get from file by to class variable"
                    <<" then printed: " << c;
    }
};
    
int main(){

    std::ifstream by_ifstream;
    by_ifstream.open("First_test_input.txt");

    from_stream send(by_ifstream);
    send.show();

    return 0;
}