@@ -34,7 +34,7 @@ namespace objects
3434
3535namespace detail {
3636
37- template <typename Func, class CallPolicies , class NameSpaceT >
37+ template <class Func , class CallPolicies , class NameSpaceT >
3838static void name_space_def (
3939 NameSpaceT& name_space,
4040 char const * name,
@@ -48,7 +48,7 @@ static void name_space_def(
4848 name, f, policies, doc);
4949}
5050
51- template <typename Func, class CallPolicies >
51+ template <class Func , class CallPolicies >
5252static void name_space_def (
5353 object& name_space,
5454 char const * name,
@@ -59,12 +59,12 @@ static void name_space_def(
5959 )
6060{
6161 scope within (name_space);
62-
62+
6363 def (name, f, policies, doc);
6464}
6565
6666// For backward compatibility
67- template <typename Func, class CallPolicies , class NameSpaceT >
67+ template <class Func , class CallPolicies , class NameSpaceT >
6868static void name_space_def (
6969 NameSpaceT& name_space,
7070 char const * name,
@@ -133,27 +133,37 @@ struct define_stub_function {};
133133 template <int N>
134134 struct define_with_defaults_helper {
135135
136- template <typename StubsT, typename NameSpaceT>
136+ template <class StubsT , class CallPolicies , class NameSpaceT >
137137 static void
138- def (char const * name, StubsT stubs, NameSpaceT& name_space, char const * doc)
138+ def (
139+ char const * name,
140+ StubsT stubs,
141+ CallPolicies const & policies,
142+ NameSpaceT& name_space,
143+ char const * doc)
139144 {
140145 // define the NTH stub function of stubs
141- define_stub_function<N>::define (name, stubs, name_space, doc);
146+ define_stub_function<N>::define (name, stubs, policies, name_space, doc);
142147 // call the next define_with_defaults_helper
143- define_with_defaults_helper<N-1 >::def (name, stubs, name_space, doc);
148+ define_with_defaults_helper<N-1 >::def (name, stubs, policies, name_space, doc);
144149 }
145150 };
146151
147152// /////////////////////////////////////
148153 template <>
149154 struct define_with_defaults_helper <0 > {
150155
151- template <typename StubsT, typename NameSpaceT>
156+ template <class StubsT , class CallPolicies , class NameSpaceT >
152157 static void
153- def (char const * name, StubsT stubs, NameSpaceT& name_space, char const * doc)
158+ def (
159+ char const * name,
160+ StubsT stubs,
161+ CallPolicies const & policies,
162+ NameSpaceT& name_space,
163+ char const * doc)
154164 {
155165 // define the Oth stub function of stubs
156- define_stub_function<0 >::define (name, stubs, name_space, doc);
166+ define_stub_function<0 >::define (name, stubs, policies, name_space, doc);
157167 // return
158168 }
159169 };
@@ -162,11 +172,12 @@ struct define_stub_function {};
162172//
163173// define_with_defaults
164174//
165- // 1. char const* name: function name that will be visible to python
166- // 2. StubsT: a function stubs struct (see defaults_gen.hpp)
167- // 3. NameSpaceT& name_space: a python::class_ or python::module instance
168- // 4. SigT sig: Function signature typelist (see defaults_gen.hpp)
169- // 5. char const* name: doc string
175+ // 1. char const* name: function name that will be visible to python
176+ // 2. StubsT: a function stubs struct (see defaults_gen.hpp)
177+ // 3. CallPolicies& policies: Call policies
178+ // 4. NameSpaceT& name_space: a python::class_ or python::module instance
179+ // 5. SigT sig: Function signature typelist (see defaults_gen.hpp)
180+ // 6. char const* name: doc string
170181//
171182// This is the main entry point. This function recursively defines all
172183// stub functions of StubT (see defaults_gen.hpp) in NameSpaceT name_space which
@@ -179,11 +190,12 @@ struct define_stub_function {};
179190// void C::foo(int) mpl::type_list<void, C, int>
180191//
181192// /////////////////////////////////////////////////////////////////////////////
182- template <typename StubsT, typename NameSpaceT, typename SigT>
193+ template <class StubsT , class CallPolicies , class NameSpaceT , class SigT >
183194 inline void
184195 define_with_defaults (
185196 char const * name,
186197 StubsT,
198+ CallPolicies const & policies,
187199 NameSpaceT& name_space,
188200 SigT sig,
189201 char const * doc)
@@ -204,7 +216,7 @@ struct define_stub_function {};
204216
205217 typedef typename stubs_type::template gen<SigT> gen_type;
206218 define_with_defaults_helper<stubs_type::n_funcs-1 >::def
207- (name, gen_type (), name_space, doc);
219+ (name, gen_type (), policies, name_space, doc);
208220 }
209221
210222} // namespace detail
@@ -220,18 +232,19 @@ struct define_stub_function {};
220232
221233template <>
222234struct define_stub_function <BOOST_PP_ITERATION()> {
223- template <typename StubsT, typename NameSpaceT>
235+ template <class StubsT , class CallPolicies , class NameSpaceT >
224236 static void define (
225237 char const * name,
226238 StubsT,
239+ CallPolicies const & policies,
227240 NameSpaceT& name_space,
228241 char const * doc
229242 )
230243 {
231244 detail::name_space_def (name_space,
232245 name,
233246 &StubsT::BOOST_PP_CAT (func_, BOOST_PP_ITERATION ()),
234- default_call_policies () ,
247+ policies ,
235248 doc, &name_space);
236249 }
237250};
0 commit comments