从没有临时变量的ifstream中提取?

时间:2018-03-30 18:24:31

标签: c++ stream operator-overloading ifstream syntactic-sugar

$("#jqGrid").navButtonAdd('#jqGridPager', { id: "btnCustom", caption: "", title: "Test Title", buttonicon: 'fa fa-file-excel-o', onClickButton: function () { window.location.href = "/Controller/Action"; //need to get a responce }, position: "last" }); 提供ifstream的重载,以从流的下一行中提取值。但是,我经常发现自己经常这样做:

operator>>

有没有办法在不必创建此临时变量的情况下将此数据导入int index; input >> index; arr[index] = <something>;

2 个答案:

答案 0 :(得分:2)

您可以编写一个函数来从istream

中提取下一个值
template <typename T> // T must be DefaultConstructible
T read(std::istream& input) {
    T result;
    input >> result;
    return result;
}

然后,你可以写:

arr[read<int>(input)] = <something>;

虽然你应该写

arr.at(read<int>(input)) = <something>;

因为否则您会遇到缓冲区溢出漏洞。如果输入文件的整数超出范围,那么你就会写出界限。

答案 1 :(得分:2)

当然,你可以通过构建一个临时istream_iterator来做到这一点,例如:

arr[*istream_iterator<int>(input)] = something