std :: istream & operator >> (std :: istream &, ClassName &) - PullRequest
0 голосов
/ 26 ноября 2018

Я проверил в интернете, но не смог найти что-то подходящее.

Как можно иметь такой основной (оригинальный основной):

 int main()
    {
        Image left;
        std::ifstream ifs("left.txt");
        ifs >> left;
        ifs.close();
        waitForKey("cout << left");
        std::cout << left;
    }

И попытаться сделать какthis (мое декодирование):

//m_pixel is a member that holds a single char
//m_H = height
//m_W = width
std::istream& operator>>(std::istream& is, ClassName& image)
{
    image.m_pixel = new Pixel*[image.m_H];

    for (int i = 0; i < image.m_H; i++)
        image.m_pixel[i] = new Pixel[image.m_W];
}

Например, как мне предположить вставить 'is' в изображение, если я не знаю, например, высоту и ширину?Как я могу их узнать?И как я могу вставить символ «есть» внутри изображения?Короче, как декодировать этот код?

1 Ответ

0 голосов
/ 26 ноября 2018

Очевидно, что когда вы сбрасываете свое изображение, вам нужно начать с дампа размеров:

std::ostream& operator<<(std::ostream& os, ClassName& image)
{
    os << image.m_H << " " << image.m_W;
    // Dump the rest as before
    return os;
}

Затем прочитайте их снова, а затем остальные данные:

std::istream& operator>>(std::istream& is, ClassName& image)
{
    is >> image.m_H >> image.m_W;
    image.m_pixel = new Pixel*[image.m_H];

    for (int i = 0; i < image.m_H; ++i)
    {
        image.m_pixel[i] = new Pixel[image.m_W];
        for (int j = 0; j < image.m_W; ++j)
        {
             is >> image.m_pixel[i][j];
        }
    }
    return is;
}

Нокак сказал @NathanOliver, используйте std::vector<Pixel>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...