add string_compose argument specializations so that empty std::string and empty C strings are handled as intended
This commit is contained in:
parent
f3a1ac21cb
commit
c1d6a2fd92
@ -54,6 +54,10 @@ namespace StringPrivate
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
Composition &arg(const T &obj);
|
Composition &arg(const T &obj);
|
||||||
|
|
||||||
|
// specialization to catch strings (C++ and C)
|
||||||
|
Composition &arg(const std::string &str);
|
||||||
|
Composition &arg(char const * const cstr);
|
||||||
|
|
||||||
// compose and return string
|
// compose and return string
|
||||||
std::string str() const;
|
std::string str() const;
|
||||||
|
|
||||||
@ -138,6 +142,42 @@ namespace StringPrivate
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Composition &Composition::arg(const std::string &str)
|
||||||
|
{
|
||||||
|
/* specialization to ensure that empty strings show up
|
||||||
|
* in the output
|
||||||
|
*/
|
||||||
|
for (specification_map::const_iterator i = specs.lower_bound(arg_no),
|
||||||
|
end = specs.upper_bound(arg_no); i != end; ++i) {
|
||||||
|
output_list::iterator pos = i->second;
|
||||||
|
++pos;
|
||||||
|
|
||||||
|
output.insert(pos, str);
|
||||||
|
}
|
||||||
|
|
||||||
|
++arg_no;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Composition &Composition::arg(char const * const cstr)
|
||||||
|
{
|
||||||
|
/* specialization to ensure that empty C strings show up
|
||||||
|
* in the output
|
||||||
|
*/
|
||||||
|
for (specification_map::const_iterator i = specs.lower_bound(arg_no),
|
||||||
|
end = specs.upper_bound(arg_no); i != end; ++i) {
|
||||||
|
output_list::iterator pos = i->second;
|
||||||
|
++pos;
|
||||||
|
|
||||||
|
output.insert(pos, std::string (cstr));
|
||||||
|
}
|
||||||
|
|
||||||
|
++arg_no;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
inline Composition::Composition(std::string fmt)
|
inline Composition::Composition(std::string fmt)
|
||||||
: arg_no(1)
|
: arg_no(1)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user