summaryrefslogtreecommitdiffstats
path: root/base/template_util.h
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-06 06:55:25 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-06 06:55:25 +0000
commitbf3dd3cc6b32fd98b82f5e22a9ab1fddbe38f8d9 (patch)
treea5f3d7b91e1b0f5a70660ab80d6c4c1d8f5a33c8 /base/template_util.h
parentc80725d518df535f6e08e61d5bab47600046a646 (diff)
downloadchromium_src-bf3dd3cc6b32fd98b82f5e22a9ab1fddbe38f8d9.zip
chromium_src-bf3dd3cc6b32fd98b82f5e22a9ab1fddbe38f8d9.tar.gz
chromium_src-bf3dd3cc6b32fd98b82f5e22a9ab1fddbe38f8d9.tar.bz2
Gin: Add support for binding JS methods to C++ instance methods.
Also: - Added support for computed properties to ObjectTemplateBuilder - Realized it was possible for CreateFunctionTemplate to be just one template BUG= R=abarth@chromium.org, jyasskin@chromium.org Review URL: https://codereview.chromium.org/103703002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@239126 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/template_util.h')
-rw-r--r--base/template_util.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/base/template_util.h b/base/template_util.h
index 30572f1..f4bf746 100644
--- a/base/template_util.h
+++ b/base/template_util.h
@@ -28,6 +28,39 @@ typedef integral_constant<bool, false> false_type;
template <class T> struct is_pointer : false_type {};
template <class T> struct is_pointer<T*> : true_type {};
+// Member function pointer detection up to four params. Add more as needed
+// below. This is built-in to C++ 11, and we can remove this when we switch.
+template<typename T>
+struct is_member_function_pointer : false_type {};
+
+template <typename R, typename Z>
+struct is_member_function_pointer<R(Z::*)()> : true_type {};
+template <typename R, typename Z>
+struct is_member_function_pointer<R(Z::*)() const> : true_type {};
+
+template <typename R, typename Z, typename A>
+struct is_member_function_pointer<R(Z::*)(A)> : true_type {};
+template <typename R, typename Z, typename A>
+struct is_member_function_pointer<R(Z::*)(A) const> : true_type {};
+
+template <typename R, typename Z, typename A, typename B>
+struct is_member_function_pointer<R(Z::*)(A, B)> : true_type {};
+template <typename R, typename Z, typename A, typename B>
+struct is_member_function_pointer<R(Z::*)(A, B) const> : true_type {};
+
+template <typename R, typename Z, typename A, typename B, typename C>
+struct is_member_function_pointer<R(Z::*)(A, B, C)> : true_type {};
+template <typename R, typename Z, typename A, typename B, typename C>
+struct is_member_function_pointer<R(Z::*)(A, B, C) const> : true_type {};
+
+template <typename R, typename Z, typename A, typename B, typename C,
+ typename D>
+struct is_member_function_pointer<R(Z::*)(A, B, C, D)> : true_type {};
+template <typename R, typename Z, typename A, typename B, typename C,
+ typename D>
+struct is_member_function_pointer<R(Z::*)(A, B, C, D) const> : true_type {};
+
+
template <class T, class U> struct is_same : public false_type {};
template <class T> struct is_same<T,T> : true_type {};