gpt4 book ai didi

C++ 使用带有 boost::lexical_cast 的类

转载 作者:可可西里 更新时间:2023-11-01 17:52:13 28 4
gpt4 key购买 nike

我想将我的测试类与boost::lexical_cast一起使用.我重载了operator<<operator>>但它给了我运行时错误。
这是我的代码:

#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;

class Test {
int a, b;
public:
Test() { }
Test(const Test &test) {
a = test.a;
b = test.b;
}
~Test() { }

void print() {
cout << "A = " << a << endl;
cout << "B = " << b << endl;
}

friend istream& operator>> (istream &input, Test &test) {
input >> test.a >> test.b;
return input;
}

friend ostream& operator<< (ostream &output, const Test &test) {
output << test.a << test.b;
return output;
}
};

int main() {
try {
Test test = boost::lexical_cast<Test>("10 2");
} catch(std::exception &e) {
cout << e.what() << endl;
}
return 0;
}

输出:

bad lexical cast: source type value could not be interpreted as target

顺便说一句,我使用的是 Visual Studio 2010,但我已经尝试过使用 g++ 的 Fedora 16 并得到了相同的结果!

最佳答案

您的问题来自于 boost::lexical_cast 不会忽略输入中的空格(它取消设置输入流的 skipws 标志)。

解决方案是自己在提取运算符中设置标志,或者只跳过一个字符。实际上,提取运算符应该反射(reflect)插入运算符:因为您在输出 Test 实例时明确放置了一个空格,所以您应该在提取实例时明确读取空格。

This thread讨论主题,推荐的解决方案是执行以下操作:

friend std::istream& operator>>(std::istream &input, Test &test)
{
input >> test.a;
if((input.flags() & std::ios_base::skipws) == 0)
{
char whitespace;
input >> whitespace;
}
return input >> test.b;
}

关于C++ 使用带有 boost::lexical_cast 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382884/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com