#pragma once\r
\r
+#include "except.h"\r
+\r
#include <boost/lexical_cast.hpp>\r
\r
#include <type_traits>\r
typename std::enable_if<!std::is_convertible<T, std::wstring>::value, typename std::decay<T>::type>::type get_param(const std::wstring& name, C&& params, T fail_value = T())\r
{ \r
auto it = std::find(std::begin(params), std::end(params), name);\r
- if(it == params.end() || ++it == params.end()) \r
+ if(it == params.end()) \r
return fail_value;\r
\r
- T value = fail_value;\r
try\r
{\r
- value = boost::lexical_cast<std::decay<T>::type>(*it);\r
- }\r
- catch(boost::bad_lexical_cast&){}\r
+ if(++it == params.end())\r
+ throw std::out_of_range("");\r
\r
- return value;\r
+ return boost::lexical_cast<std::decay<T>::type>(*it);\r
+ }\r
+ catch(...)\r
+ { \r
+ CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));\r
+ }\r
}\r
\r
template<typename C>\r
std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")\r
{ \r
auto it = std::find(std::begin(params), std::end(params), name);\r
- if(it == params.end() || ++it == params.end()) \r
+ if(it == params.end()) \r
return fail_value;\r
- return *it;\r
+ \r
+ try\r
+ {\r
+ if(++it == params.end())\r
+ throw std::out_of_range("");\r
+\r
+ return *it; \r
+ }\r
+ catch(...)\r
+ { \r
+ CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));\r
+ }\r
}\r
\r
}
\ No newline at end of file