Hi Sebastian
You've got me converted to std::format !
I like what you said that it formats by default with {} so no
duplicate of me needing to match %s or such to particular
parameters. Also I like that it is reversible.
I imagine the compiler will be able to check the variadic
parameters match what is expected, eg like at present for the
conventional approach.
std::string str_fmt(const char * const format, ...) __attribute__
((format (printf,1,2)));
Jonny
On 20/07/2019 23:17, Sebastian Büttner
via Std-Proposals wrote:
Hi again
Jonny,
just to come back to your original example and to clearify things:
std::format is supposed to replace not only your missing
"to_string(bool)" but to process the entire formatting in your
example.
So you example might become:
std::string fmt(const std::string header, bool b)
{
return std::format("{} {} set", header, b);
}
Cheers,
Sebastian
On 2019-07-21 00:03, Sebastian Büttner via Std-Proposals wrote:
Hi Jonny,
std::format origins from libfmt
(https://github.com/fmtlib/fmt/). The
syntax is related to other format libraries that have prooven
useful
like pythons string.format for example.
The main goal is to get the typesafety from iostreams but the
convenient format strings of printf like approaches.
Booleans are by default formatted with their textual
representation
(true|false), so the following is sufficient:
std::string s = std::format("{}", true);
which is kinda neat :) (you do not need type information within
the
formatting string which is great for typesafety!)
Cheers,
Sebastian
On 2019-07-20 23:51, Jonny Grant via Std-Proposals wrote:
Hi Garrett
Many thanks for the reply with link.
std::format could be good good, I hadn't heard. Currently I
had always needed to use my own variadic std::string
str_sprintf().
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r9.html#Syntax
Saw this
std::string s = std::format("{:s}", true);
It looks like different syntax to printf % style is being
used. Don't think that is ideal...
But at least bool is in..
Cheers, Jonny
On 20/07/2019 22:24, Garrett May via Std-Proposals wrote:
Hi Jonny,
With respect to std::to_string, please see a reference to it
here:
https://en.cppreference.com/w/cpp/string/basic_string/to_string
std::to_string appears to be defined specifically for
primitive numeric types that match up to using sprintf and a
format specifier. I don't think that std::to_string(bool)
would be suitable, as it does not have a format specifier like
the others. And there is also the possibility that when
converting a bool to a string that the user genuinely want '0'
or '1' to be produced, as they may be trying to handle the
result as data.
As Jake said, there is a format library coming out for C++20.
That sounds like a more desirable way to handle this problem,
as like I mentioned, choosing how one wants a bool to be
represented textually is similar to how one would want a float
or a double represented textually.
Regards,
Garrett
On Sat, 20 Jul 2019, 21:39 Jonny Grant via Std-Proposals,
<std-proposals@lists.isocpp.org> wrote:
Hi Garrett
Many thanks for your reply.
Yes, I see std::boolalpha sets an I/O flag.. but seems a bit
of a long way to get it into a string, I'd need to use in
conjunction with std::istringstream to get a string...
I wanted to do something like this example:
IDEA
std::string fmt(const std::string header, bool b)
{
return header + " " + std::to_string(b) + " set";
}
HOW I WOULD DO NOW
As his doesn't work, I'd have it at present as:
std::string fmt(const std::string header, bool b)
{
return header + " " + b?"true":"false" + " set";
}
Regards, Jonny
On 20/07/2019 21:21, Garrett May via Std-Proposals wrote:
std::boolalpha is already available:
int main(){
bool const a = true;
std::cout << std::boolalpha << a <<
std::endl;
}
My gut instinct here is that one is supposed to control how
one wants data to be printed out, in the same way as how
float/double precision is done.
On Sat, 20 Jul 2019, 21:16 Jonny Grant via Std-Proposals,
<std-proposals@lists.isocpp.org> wrote: Hello
Could std::string to_string(bool value); be added? Currently
it outputs
as a number due to the implicit conversion to int?
Feel it would have been more appropriate as "true" or "false".
http://www.cplusplus.com/reference/string/to_string/
$ g++-8 -Wall -o to_string to_string.cpp
$ ./to_string
1
// g++-8 -Wall -o to_string to_string.cpp
#include <string>
#include <iostream>
int main()
{
const bool a = true;
const std::string b(std::to_string(a));
std::cout << b << std::endl;
}
Cheers, Jonny
.
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
http://lists.isocpp.org/mailman/listinfo.cgi/std-proposals