Всем привет!
Начал вот писать класс для работы с командной строкой.
За основу взял boost::program_options.
Есть у меня в программе строковые и булевые опции.
Для их хранения предусмотрены ассоциативные массивы.
Только вот не хочу я делать методы типа
GetStringOption, GetBoolOption и т.д.
Хочется написать что-то вроде шаблонного метода, приведённого
ниже, а потом вызывать:
CmdLine C(argc,argv);
const std::string s("disable_stderr");
bool b = C.GetOpt(s);
const std::string ss("cfg_f_name");
std::string name = C.GetOpt(ss);
Правда вот для C++ подобные фокусы неправильны.
Как я понимаю без явной специализации не обойтись:
bool b = C.GetOpt<bool>(s);
std::string name = C.GetOpt<std::string>(ss);
Вообщем задача понятна : вызывать нужный метод в зависимости от
типа значения слева без явного указания этого типа.
Как это реализовать в C++?
Кусочек класса приведён ниже
/*
\class CmdLine
\brief Class for encapsulate all command line operations
*/
class CmdLine
{
public:
/// Constructor
CmdLine(int argc, char** argv);
/// Destructor
~CmdLine();
template <class T>
T GetOpt(const std::string& OptionName) const
{
// Do anything
}
private:
/// Map for string options, e.g. Script File Name
std::map<std::string,std::string> StringOptions_;
/// Map for string options, e.g. Disable StdErr Output
std::map<std::string,bool> BoolOptions_;
/// Options Description
po::options_description Description_;
};
Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от romanSA

Ответ на:
Читайте Страструпа, млин......
от AIv

Ответ на:
комментарий
от Krivenok_Dmitry

Ответ на:
комментарий
от AIv
Ответ на:
комментарий
от Krivenok_Dmitry
Ответ на:
комментарий
от Vinick
Ответ на:
комментарий
от Krivenok_Dmitry
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Boost program_options and Generic selector trouble! (2005)
- Форум Вопрос по шаблонам функций-членов в С++ (2005)
- Форум gcc bug (global array of templated class - no destructors) (2005)
- Форум boost::program_options запретить ввод positional options (2016)
- Форум Почему ifstream не читает нормальные значения из sysfs? (2020)
- Форум [C++] Особенности реализации std::vector (2010)
- Форум C++: Может ли класс иметь static const переменую типа map ? (2006)
- Форум Вспоминая C++. Проблемы с линковкой template'ов (2007)
- Форум С++ Помогите избавиться от дублирования однотипного кода. (2018)
- Форум [C++ такой C++]Шаблонные методы и разделение на .h/.cpp (2010)