两个不同流的通用函数

时间:2017-05-23 08:12:50

标签: c++ generics stream inputstream

我有一个函数read(),它使用ifstream从图像中读取数据。我还为>>的I / O运算符read()重载了与operator >>具有完全相同的定义,除了istreamvoid read (string filename); std::istream & operator >> (std::istream & is, Image & img); //overload >> operator //same definition for both 上工作。

read()

我有没有办法实现可用于operator>>"lock": [ ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "EMPTY", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"], ["EMPTY", "EMPTY", "ONE", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR", "FOUR"] ], "sluiceWidths": [5.458, 4.900, 4.896, 4.898, 4.849, 4.645, 4.958, 4.959, 5.365, 5.810, 5.810, 5.795, 5.796, 5.793, 5.802, 5.775, 5.804], 重载的泛型函数?

1 个答案:

答案 0 :(得分:1)

由于std::ifstreamstd::istream,您的阅读功能可能只需调用operator >>,例如:

std::istream & operator >> (std::istream& is, Image& img);

void read (string filename, Image& img)
{
    std::ifstream is(filename);

    if (is.is_open()) {
        is >> img;
    }
}