考虑这个例子

Gabi::Herbs::Filesystem::FileReader filereader
    {
    Gabi::Herbs::Filesystem::FileIn
        {Gabi::Herbs::Filesystem::Path(GABI_HERBS_STR("herbs/textio/test_utf8.txt")),0}
        ,0
    };
Gabi::Herbs::IO::ReaderBuffering reader(filereader,128);
Gabi::Herbs::TextIO::Decoder decoder(reader,Gabi::Herbs::TextIO::ConverterUTF8::factory);


它是C ++,但可以是任何支持OOP的语言。所以


使用路径抽象来区分文件路径和常规字符串
创建一个随机访问文件。这不会移动任何文件指针
使用FileReader读取文件[FileIn已通过引用计数进行复制]。读取器将从文件的开头开始零字节。
由于它是文本文件,因此最好使用缓冲的I / O。这减少了所需的系统调用次数。在这种情况下,它将在每次调用时获取128个字节。
文本文件可以用许多不同的方式编码。创建一个尝试对文件进行解码的解码器。


在这种情况下,如何创建包装器,因此不需要创建三个对象和两个临时对象?可以使用合并类,但是会失去一些灵活性。

最佳答案

也许像下面这样创建一个新类:

class FileReaderDecoder
{
    Gabi::Herbs::Filesystem::FileReader filereader;
    Gabi::Herbs::IO::ReaderBuffering reader;
    Gabi::Herbs::TextIO::Decoder decoder;

public:
    FileReaderDecoder(std::string file_name)
    {/*Initialize the three member variables like you did in your own code*/}

    //Add accessor functions here to get the data from the decoded file, e.g.:
    std::string GetData(int start, int size);
}


然后,通话减少到例如

FileReaderDecoder file_rd_dec("herbs/textio/test_utf8.txt");
file_rd_dec.GetData(0, 16);

关于c++ - 如何摆脱长时间的初始化而又不失去灵活性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30219154/

10-09 18:32