Require a BaseParameters type at compile time via enable_if
This commit is contained in:
committed by
Patrick Niklaus
parent
d989714007
commit
ce82242004
@@ -4,6 +4,10 @@
|
||||
#include "engine/api/route_parameters.hpp"
|
||||
#include "engine/api/table_parameters.hpp"
|
||||
|
||||
#include <boost/optional/optional.hpp>
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace server
|
||||
@@ -11,25 +15,28 @@ namespace server
|
||||
namespace api
|
||||
{
|
||||
|
||||
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
||||
template<typename ParameterT>
|
||||
boost::optional<ParameterT> parseParameters(std::string::iterator& iter, std::string::iterator end);
|
||||
|
||||
// copy on purpose because we need mutability
|
||||
template<typename ParameterT>
|
||||
inline boost::optional<ParameterT> parseParameters(std::string options_string)
|
||||
namespace detail
|
||||
{
|
||||
auto iter = options_string.begin();
|
||||
return parseParameters<ParameterT>(iter, options_string.end());
|
||||
template <typename T> using is_parameter_t = std::is_base_of<engine::api::BaseParameters, T>;
|
||||
} // ns detail
|
||||
|
||||
// Starts parsing and iter and modifies it until iter == end or parsing failed
|
||||
template <typename ParameterT,
|
||||
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
||||
boost::optional<ParameterT> parseParameters(std::string::iterator &iter, std::string::iterator end);
|
||||
|
||||
// Copy on purpose because we need mutability
|
||||
template <typename ParameterT,
|
||||
typename std::enable_if<detail::is_parameter_t<ParameterT>::value, int>::type = 0>
|
||||
boost::optional<ParameterT> parseParameters(std::string options_string)
|
||||
{
|
||||
const auto first = options_string.begin();
|
||||
const auto last = options_string.end();
|
||||
return parseParameters<ParameterT>(first, last);
|
||||
}
|
||||
|
||||
template<>
|
||||
boost::optional<engine::api::RouteParameters> parseParameters(std::string::iterator& iter, std::string::iterator end);
|
||||
template<>
|
||||
boost::optional<engine::api::TableParameters> parseParameters(std::string::iterator& iter, std::string::iterator end);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} // ns api
|
||||
} // ns server
|
||||
} // ns osrm
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user