diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-16 22:35:14 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-16 22:35:14 +0000 |
commit | 935405891d4f2cb40c4fe287e3e4c06ade5c38ce (patch) | |
tree | d71dd33fe46eeddb200d92dda1d02c9c0b8a7c10 /base/bind_internal_win.h | |
parent | 409dc6ef2d6095d71f6ea4f59b07106b91626d24 (diff) | |
download | chromium_src-935405891d4f2cb40c4fe287e3e4c06ade5c38ce.zip chromium_src-935405891d4f2cb40c4fe287e3e4c06ade5c38ce.tar.gz chromium_src-935405891d4f2cb40c4fe287e3e4c06ade5c38ce.tar.bz2 |
Support binding WeakPtr<> to methods with void return types.
This should give functionality similar to ScopedRunnableMethodFactory.
Note that binding a WeakPtr only make sense with methods with void return types. If the return type is not void, then it is unclear what the function should return when the pointer is invalidated.
This code adds a compile time assert to check the return type.
BUG=35223
TEST=unittests
Review URL: http://codereview.chromium.org/7015064
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85549 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/bind_internal_win.h')
-rw-r--r-- | base/bind_internal_win.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/base/bind_internal_win.h b/base/bind_internal_win.h index 85ba2ae..250f472 100644 --- a/base/bind_internal_win.h +++ b/base/bind_internal_win.h @@ -31,6 +31,8 @@ template <typename R> struct FunctionTraits<R(__stdcall *)()> { typedef R (*NormalizedSig)(); typedef false_type IsMethod; + + typedef R Return; }; // __fastcall Function: Arity 0. @@ -38,6 +40,8 @@ template <typename R> struct FunctionTraits<R(__fastcall *)()> { typedef R (*NormalizedSig)(); typedef false_type IsMethod; + + typedef R Return; }; // __stdcall Function: Arity 1. @@ -45,6 +49,9 @@ template <typename R, typename X1> struct FunctionTraits<R(__stdcall *)(X1)> { typedef R (*NormalizedSig)(X1); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; }; @@ -54,6 +61,9 @@ template <typename R, typename X1> struct FunctionTraits<R(__fastcall *)(X1)> { typedef R (*NormalizedSig)(X1); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; }; @@ -63,6 +73,9 @@ template <typename R, typename X1, typename X2> struct FunctionTraits<R(__stdcall *)(X1, X2)> { typedef R (*NormalizedSig)(X1, X2); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -73,6 +86,9 @@ template <typename R, typename X1, typename X2> struct FunctionTraits<R(__fastcall *)(X1, X2)> { typedef R (*NormalizedSig)(X1, X2); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -83,6 +99,9 @@ template <typename R, typename X1, typename X2, typename X3> struct FunctionTraits<R(__stdcall *)(X1, X2, X3)> { typedef R (*NormalizedSig)(X1, X2, X3); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -94,6 +113,9 @@ template <typename R, typename X1, typename X2, typename X3> struct FunctionTraits<R(__fastcall *)(X1, X2, X3)> { typedef R (*NormalizedSig)(X1, X2, X3); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -105,6 +127,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4> struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4)> { typedef R (*NormalizedSig)(X1, X2, X3, X4); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -117,6 +142,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4> struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4)> { typedef R (*NormalizedSig)(X1, X2, X3, X4); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -130,6 +158,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4, struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4, X5)> { typedef R (*NormalizedSig)(X1, X2, X3, X4, X5); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -144,6 +175,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4, struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4, X5)> { typedef R (*NormalizedSig)(X1, X2, X3, X4, X5); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -158,6 +192,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4, struct FunctionTraits<R(__stdcall *)(X1, X2, X3, X4, X5, X6)> { typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; @@ -173,6 +210,9 @@ template <typename R, typename X1, typename X2, typename X3, typename X4, struct FunctionTraits<R(__fastcall *)(X1, X2, X3, X4, X5, X6)> { typedef R (*NormalizedSig)(X1, X2, X3, X4, X5, X6); typedef false_type IsMethod; + + typedef R Return; + // Target type for each bound parameter. typedef X1 B1; typedef X2 B2; |