Named parameter
More C++ Idioms Named Parameter
isocpp What is the “Named Parameter Idiom”? ¶ Δ
It’s a fairly useful way to exploit method chaining.
The fundamental problem solved by the Named Parameter Idiom is that C++ only supports positional parameters.
NOTE: 所谓named parameter,其实就是python中的
kwargs
。
#include <string>
class File;
class OpenFile
{
public:
OpenFile(const std::string& filename);
// sets all the default values for each data member
OpenFile& readonly(); // changes readonly_ to true
OpenFile& readwrite(); // changes readonly_ to false
OpenFile& createIfNotExist();
OpenFile& blockSize(unsigned nbytes);
// ...
private:
friend class File;
std::string filename_;
bool readonly_; // defaults to false [for example]
bool createIfNotExist_; // defaults to false [for example]
// ...
unsigned blockSize_; // defaults to 4096 [for example]
// ...
};
inline OpenFile::OpenFile(const std::string& filename)
: filename_(filename)
, readonly_(false)
, createIfNotExist_(false)
, blockSize_(4096u)
{
}
inline OpenFile& OpenFile::readonly()
{
readonly_ = true;
return *this;
}
inline OpenFile& OpenFile::readwrite()
{
readonly_ = false;
return *this;
}
inline OpenFile& OpenFile::createIfNotExist()
{
createIfNotExist_ = true;
return *this;
}
inline OpenFile& OpenFile::blockSize(unsigned nbytes)
{
blockSize_ = nbytes;
return *this;
}
class File
{
public:
File(const OpenFile& params);
// ...
};
File::File(const OpenFile& params)
{
// ...
}
int main()
{
File f = OpenFile("foo.txt")
.readonly()
.createIfNotExist()
.blockSize(1024);
}
编译g++ tests.cpp
wikipedia Named parameter#With chained method calls
TO READ
https://marcoarena.wordpress.com/2014/12/16/bring-named-parameters-in-modern-cpp/
https://stackoverflow.com/questions/40533193/v8-c-how-to-get-object-key-values-provided-as-arguments