我正在使用一个函数(TinyXML的TiXmlElement::QueryValueAttribute(const std::string &name, T * outValue
),它试图将字符串读入传递的数据类型。在我的情况下,我传递bool
。所以我想使用boolalpha
标记,以便输入可以是true
或false
,而不是0
或1
。
我该怎么做?
感谢。
答案 0 :(得分:2)
TiXmlElement::QueryValueAttribute
使用std::istringstream
来解析值。因此,您可以围绕bool
创建一个包装类,重叠operator >>
以在提取之前始终设置boolalpha
:
class TinyXmlBoolWrapper
{
public:
TinyXmlBoolWrapper(bool& value) : m_value(value) {}
bool& m_value;
};
std::istream& operator >> (std::istream& stream, TinyXmlBoolWrapper& boolValue)
{
// Save the state of the boolalpha flag & set it
std::ios_base::fmtflags fmtflags = stream.setf(std::ios_base::boolalpha);
std::istream& result = stream >> boolValue.m_value;
stream.flags(fmtflags); // restore previous flags
return result;
}
...
bool boolValue;
TinyXmlBoolWrapper boolWrapper(boolValue);
myTinyXmlElement->QueryAttribute("attributeName", &boolWrapper);
// boolValue now contains the parsed boolean value with boolalpha used for
// parsing
答案 1 :(得分:0)
您可以使用字符串值构造一个istringstream,然后从那里流到您的* T变量。 I / O方面如下所示。
#include <iostream>
#include <iomanip>
#include <sstream>
int main()
{
// output example
std::cout << std::boolalpha << true << ' ' << false << '\n';
// input example
std::istringstream iss("true false");
bool x = false, y = true;
iss >> x >> y;
std::cout << std::boolalpha << x << ' ' << y << '\n';
}