Существует ли макрос для ifstream и ofstream или способ сократить ifstream / ofstream? - PullRequest
1 голос
/ 03 мая 2020

Например, если мое имя файла: sum00.in, sum.00.out, есть ли возможность, кроме записи одного и того же фрагмента кода:

ifstream in("sum00.in");
ofstream out("sum00.out"); 

Сначала я подумал макроса:

#define read(x) ifstream in("x.in"); ofstream out("x.out"); ///But it doesn`t work for a word.

Любой совет, который поможет мне написать один и тот же кусок, мог бы быть полезным!

1 Ответ

2 голосов
/ 03 мая 2020

Я бы порекомендовал не использовать макрос. Я бы инкапсулировал его в классе.

Пример:

#include <fstream>
#include <iostream>
#include <string>

class MyIO {
public:
    explicit MyIO(const std::string& basename) :
        in(basename + ".in"),
        out(basename + ".out")
    {}
    std::ifstream& is() { return in; }
    std::ofstream& os() { return out; }

private:
    std::ifstream in;
    std::ofstream out;
};

int main() {
    MyIO f("sum001");      // open both sum001.in and sum001.out
    int i;
    int sum = 0;
    while(f.is() >> i) {   // read from the ifstream
        sum += i;
    }
    f.os() << sum << '\n'; // write to the ofstream
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...