diff --git a/modules/core/include/opencv2/core/core.hpp b/modules/core/include/opencv2/core/core.hpp index 1ee3416488..80d42606aa 100644 --- a/modules/core/include/opencv2/core/core.hpp +++ b/modules/core/include/opencv2/core/core.hpp @@ -4200,6 +4200,21 @@ class CV_EXPORTS CommandLineParser std::map > data; std::string getString(const std::string& name) const; + template + _Tp analizeValue(const std::string& str); + + template + static _Tp getData(const std::string& str) + { + _Tp res; + std::stringstream s1(str); + s1 >> res; + return res; + } + + template + _Tp fromStringNumber(const std::string& str);//the default conversion function for numbers + template _Tp analyzeValue(const std::string& str); }; diff --git a/modules/core/src/cmdparser.cpp b/modules/core/src/cmdparser.cpp index 9cecb8d433..b01c8e2a30 100644 --- a/modules/core/src/cmdparser.cpp +++ b/modules/core/src/cmdparser.cpp @@ -134,6 +134,26 @@ std::string CommandLineParser::getString(const std::string& keys) const return data.find(names[found_index])->second[0]; } +template + _Tp CommandLineParser::fromStringNumber(const std::string& str) //the default conversion function for numbers +{ + if (str.empty()) + CV_Error(CV_StsParseError, "Empty string cannot be converted to a number"); + + const char* c_str=str.c_str(); + if((!isdigit(c_str[0])) + && + ( + (c_str[0]!='-') || (strlen(c_str) <= 1) || ( !isdigit(c_str[1]) ) + ) + ) + + { + CV_Error(CV_StsParseError, "The string '"+ str +"' cannot be converted to a number"); + } + + return getData<_Tp>(str); +} template static _Tp getData(const std::string& str)