Всем привет! Начал вот писать класс для работы с командной строкой. За основу взял 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_; };