|
Boost : |
Subject: [boost] Interest check: constant input matching manipulator
From: Eugene Wee (crystalrecursion_at_[hidden])
Date: 2009-04-08 14:21:31
Hi,
Recently, I observed in an online community a question on whether C++
had a direct replacement for a call to scanf("a=%d", a) for some int
a, using std::cin. The response given was to read the input as a
string and then parse it. Another user noted that "iostreams would be
more useful if it had the ability to match constant portions of the
input".
Looking at what already exists in the standard library and Boost,
there does indeed seem to be no direct way to match such expected
constant input. Boost.Regex and Boost.Tokenizer are indirect in this
case (and possibly overkill), and Boost.Format is about output stream
formatting only. Boost.Spirit appears to provide a way with
file_iterator, but a manipulator seems more appropriate here
considering that the functionality is quite simple.
Does anyone think that adding such a manipulator to Boost would be
desirable? I expect the syntax to be along these lines (names and
namespaces to be decided):
std::cin >> match("a=") >> a;
where a failure to match would place the input stream in a failed
state. It would also be possible to use a std::basic_string instead of
a string literal converted to a pointer to its first element as the
argument.
I have already written such a manipulator, so if anyone is interested,
I can provide my sample source.
Regards,
Eugene Wee
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk