Boost logo

Boost Users :

From: Christoph Duelli (duelli_at_[hidden])
Date: 2006-05-19 05:58:23


Vladimir Prus wrote:

> Christoph Duelli wrote:
>
>> I am trying to parse my options into a QString.
>> I have provided streaming operators for QString, so code like the
>> following does compile
>>
>> QString sProgram;
>> desc.add_options()
>> ("program,p", po::value<QString>(&sProgram), "...");
>>
>> It does even work if I pass 'simple' options:
>> -p test will work
>> -p "test oops" will not
>> The cause for that seems to be that the lexical_cast<QString>("test
>> oops") (in program_options) fails (it does fail).
>> If I use std::string the above does work.
>>
>> Seems providing streaming ops was not enough.
>> QString s;
>> "a b" >> s;
>> now s=="a"
>> lexical_cast has special support for string/wstring according to its
>> docs. I need something similar for QString...
>
> Hi Christoph,
> so the issue is that your stream operator for QString stops on whitespace,
> right? And lexical_cast has special workaround to make string->string an
> identify conversion and you want string->QString convertion to just call
> QString's construct or QString::fromLocal8Bit?
yes, that's the idea.

> I'm afraid the current design of lexical_cast does not supports this.
> You've two approaches:
>
> 1. Get lexical_cast fixed somehow. But it's in this state for years...
> 2. Customize for QStrings at program_options level:
>
> void validate(boost::any& v,
> const std::vector<std::string>& values,
> QString*, int)
> {
>
> using namespace boost::program_options;
>
> // Make sure no previous assignment to 'a' was made.
> validators::check_first_occurrence(v);
>
> // Extract the first string from 'values'. If there is more than
> // one string, it's an error, and exception will be thrown.
> const string& s = validators::get_single_string(values);
>
> v = any(QString::fromLocal8Bit(s));
should be s.c_str()
> }
>
> This is a less nice that providing operator>>, but I think it's the only
> solution now.
thank you. with this code snippet hidden in a lib it does work now.

Christoph


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net