keyword argument support, removed last traces of std::function<> usage
diff --git a/include/pybind/cast.h b/include/pybind/cast.h
index 9da3fca..3013047 100644
--- a/include/pybind/cast.h
+++ b/include/pybind/cast.h
@@ -392,14 +392,22 @@
return cast(src, policy, parent, typename make_index_sequence<size>::type());
}
- static std::string name() {
+ static std::string name(const char **keywords = nullptr, const char **values = nullptr) {
std::array<std::string, size> names {{
type_caster<typename detail::decay<Tuple>::type>::name()...
}};
std::string result("(");
int counter = 0;
for (auto const &name : names) {
+ if (keywords && keywords[counter]) {
+ result += keywords[counter];
+ result += " : ";
+ }
result += name;
+ if (values && values[counter]) {
+ result += " = ";
+ result += values[counter];
+ }
if (++counter < size)
result += ", ";
}
@@ -407,12 +415,12 @@
return result;
}
- template <typename ReturnValue, typename Func> typename std::enable_if<!std::is_void<ReturnValue>::value, ReturnValue>::type call(Func &f) {
- return call<ReturnValue, Func>(f, typename make_index_sequence<sizeof...(Tuple)>::type());
+ template <typename ReturnValue, typename Func> typename std::enable_if<!std::is_void<ReturnValue>::value, ReturnValue>::type call(Func &&f) {
+ return call<ReturnValue>(std::forward<Func>(f), typename make_index_sequence<sizeof...(Tuple)>::type());
}
- template <typename ReturnValue, typename Func> typename std::enable_if<std::is_void<ReturnValue>::value, detail::void_type>::type call(Func &f) {
- call<ReturnValue, Func>(f, typename make_index_sequence<sizeof...(Tuple)>::type());
+ template <typename ReturnValue, typename Func> typename std::enable_if<std::is_void<ReturnValue>::value, detail::void_type>::type call(Func &&f) {
+ call<ReturnValue>(std::forward<Func>(f), typename make_index_sequence<sizeof...(Tuple)>::type());
return detail::void_type();
}
@@ -421,7 +429,7 @@
}
protected:
- template <typename ReturnValue, typename Func, size_t ... Index> ReturnValue call(Func &f, index_sequence<Index...>) {
+ template <typename ReturnValue, typename Func, size_t ... Index> ReturnValue call(Func &&f, index_sequence<Index...>) {
return f((Tuple) std::get<Index>(value)...);
}