如何摆脱长期初始化而不会失去屈曲
How to get rid of long initialization without losing flexibililty
考虑此示例
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。这减少了所需的syscall数量。在这种情况下,它在每个呼叫时获取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_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 尝试摆脱任何堆内存分配
- 如何摆脱C ++中的分段错误错误?
- 在 c++ 中使用 vtd-xml 时,如何摆脱 EOFException?
- 如何摆脱为条件编译定义预处理器宏的需要?
- 在C++中释放内存期间,迭代器与指针有何不同
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 启动类函数作为失去引用的线程
- GTK:完全摆脱系统主题/CSS
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- transform_reduce & 摆脱 for 循环
- 如何摆脱算术溢出
- 如何摆脱错误c2061;语法错误 cout?
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 如何摆脱这个做同时循环?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 如何摆脱长期初始化而不会失去屈曲