Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'base/stl_helpers.hpp')
-rw-r--r--base/stl_helpers.hpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/base/stl_helpers.hpp b/base/stl_helpers.hpp
index 2130dd03d7..5ee22b6897 100644
--- a/base/stl_helpers.hpp
+++ b/base/stl_helpers.hpp
@@ -2,6 +2,7 @@
#include <algorithm>
#include <functional>
+#include <type_traits>
#include <utility>
#include <vector>
@@ -137,4 +138,29 @@ typename std::underlying_type<T>::type Key(T value)
{
return static_cast<typename std::underlying_type<T>::type>(value);
}
+
+// Use this if you want to make a functor whose first
+// argument is ignored and the rest are forwarded to |fn|.
+template <typename Fn>
+class IgnoreFirstArgument
+{
+public:
+ template <typename Gn>
+ IgnoreFirstArgument(Gn && gn) : m_fn(std::forward<Gn>(gn)) {}
+
+ template <typename Arg, typename... Args>
+ typename std::result_of<Fn(Args &&...)>::type operator()(Arg && arg, Args &&... args)
+ {
+ return m_fn(std::forward<Args>(args)...);
+ }
+
+private:
+ Fn m_fn;
+};
+
+template <typename Fn>
+IgnoreFirstArgument<Fn> MakeIgnoreFirstArgument(Fn && fn)
+{
+ return IgnoreFirstArgument<Fn>(std::forward<Fn>(fn));
+}
} // namespace my