class File;
class OpenFile{
public:
OpenFile(const std::string& file_name);
//sets all the default values for each data member.
OpenFile &_Read_only();
OpenFile &_Read_write();
OpenFile &_Create_if_not_exist();
OpenFile &_Block_size(unsigned nbytes);
private:
friend class File;
std::string m_file_name;
bool m_read_only;
bool m_create_if_not_exist;
unsigned m_block_size;
};
//Better put 'inline' keyword here!
inline OpenFile::OpenFile(const std::string& file_name)
:m_file_name(file_name),
m_read_only(false),
m_create_if_not_exist(false),
m_block_size(4096u)
{ }
inline OpenFile& OpenFile::_Read_only(void)
{
m_read_only = true;
return *this;
}
inline OpenFile& OpenFile::_Read_write(void)
{
m_read_only = false;
return *this;
}
inline OpenFile &OpenFile::_Create_if_not_exist(void)
{
m_create_if_not_exist = true;
return *this;
}
inline OpenFile &OpenFile::_Block_size(unsigned nbytes)
{
m_block_size = nbytes;
return *this;
}
class File{ //Friend of class OpenFile.So OpenFile doesn't many get()s.
public:
File(const OpenFile& params);
};
File::File(const OpenFile& params)
{
//Check the open mode recorded in class OpenFile.
//then open it.
}
//usage:
int main(void)
{
OpenFile open_file("foo.txt");
open_file._Create_if_exist();
open_file._Read_write();
File file(open_file);
}
Named Parameter
最新推荐文章于 2023-10-05 15:55:00 发布