Язык программирования C++. Вводный курс


Класс для обработки параметров командной строки


Чтобы не перегружать функцию main()

деталями, касающимися обработки параметров командной строки, лучше отделить этот фрагмент. Можно написать для этого функцию. Например:

extern int parse_options( int arg_count, char *arg_vector );

int main( int argc, char *argv[] ) {

    // ...

    int option_status;

    option_status = parse_options( argc, argv );

    // ...

}

Как вернуть несколько значений? Обычно для этого используются глобальные объекты, которые не передаются ни в функцию для их обработки, ни обратно. Альтернативной стратегией является инкапсуляция обработки параметров командной строки в класс.

Данные-члены класса представляют собой параметры, заданные пользователем в командной строке. Набор открытых встроенных функций-членов позволяет получать их значения. Конструктор инициализирует параметры значениями по умолчанию. Функция-член получает argc и argv в качестве аргументов и обрабатывает их:

#include <vector>

#include <string>

 

class CommandOpt {

public:

    CommandOpt() : _limit( -1 ), _debug_on( false ) {}

    int parse_options( int argc, char *argv[] );

 

    string out_file() { return _out_file; }

    bool   debug_on() { return _debug_on; }

    int    files()    { return _file_names.size(); }

 

    string& operator[]( int ix );

 

private:

    inline void usage( int exit_value = 0 );

 

    bool _debug_on;

    int _limit;

    string _out_file;

    vector<string> _file_names;

 

    static const char *const program_name;

    static const char *const program_version;

};

Так выглядит модифицированная функция main():[18]

#include "CommandOpt.h"

 

int main( int argc, char "argv[] ) {

   // ...

   CommandOpt com_opt;

   int option_status;

   opttion_status = com_opt. parse_options (argc, argv);

   // ...

}

Упражнение 7.15

Добавьте обработку опций -t

(включение таймера) и -b

(задание размера буфера bufsize). Не забудьте обновить usage(). Например:




Начало  Назад  Вперед



Книжный магазин