forked from boostorg/function
bind_function_test added.
[SVN r27721]
This commit is contained in:
@ -422,7 +422,12 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
const Functor* target( Functor * = 0 ) const
|
||||||
|
#else
|
||||||
const Functor* target() const
|
const Functor* target() const
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if (!manager) return 0;
|
if (!manager) return 0;
|
||||||
|
|
||||||
@ -432,14 +437,23 @@ public:
|
|||||||
if (!result.obj_ptr) return 0;
|
if (!result.obj_ptr) return 0;
|
||||||
else {
|
else {
|
||||||
typedef typename detail::function::get_function_tag<Functor>::type tag;
|
typedef typename detail::function::get_function_tag<Functor>::type tag;
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
return get_functor_pointer(tag(), 0, (Functor*)0);
|
||||||
|
#else
|
||||||
return get_functor_pointer<Functor>(tag(), 0);
|
return get_functor_pointer<Functor>(tag(), 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
bool contains(const F& f) const
|
bool contains(const F& f) const
|
||||||
{
|
{
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
if (const F* fp = this->target( (F*)0 )) {
|
||||||
|
#else
|
||||||
if (const F* fp = this->template target<F>()) {
|
if (const F* fp = this->template target<F>()) {
|
||||||
|
#endif
|
||||||
return function_equal(*fp, f);
|
return function_equal(*fp, f);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
@ -477,20 +491,36 @@ public: // should be protected, but GCC 2.95.3 will fail to allow access
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
Functor* get_functor_pointer(detail::function::function_ptr_tag, int, Functor * = 0)
|
||||||
|
#else
|
||||||
Functor* get_functor_pointer(detail::function::function_ptr_tag, int)
|
Functor* get_functor_pointer(detail::function::function_ptr_tag, int)
|
||||||
|
#endif
|
||||||
{ return reinterpret_cast<Functor*>(&functor.func_ptr); }
|
{ return reinterpret_cast<Functor*>(&functor.func_ptr); }
|
||||||
|
|
||||||
template<typename Functor, typename Tag>
|
template<typename Functor, typename Tag>
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
Functor* get_functor_pointer(Tag, long, Functor * = 0)
|
||||||
|
#else
|
||||||
Functor* get_functor_pointer(Tag, long)
|
Functor* get_functor_pointer(Tag, long)
|
||||||
|
#endif
|
||||||
{ return static_cast<Functor*>(functor.obj_ptr); }
|
{ return static_cast<Functor*>(functor.obj_ptr); }
|
||||||
|
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
const Functor*
|
const Functor*
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
get_functor_pointer(detail::function::function_ptr_tag, int, Functor * = 0) const
|
||||||
|
#else
|
||||||
get_functor_pointer(detail::function::function_ptr_tag, int) const
|
get_functor_pointer(detail::function::function_ptr_tag, int) const
|
||||||
|
#endif
|
||||||
{ return reinterpret_cast<const Functor*>(&functor.func_ptr); }
|
{ return reinterpret_cast<const Functor*>(&functor.func_ptr); }
|
||||||
|
|
||||||
template<typename Functor, typename Tag>
|
template<typename Functor, typename Tag>
|
||||||
|
#if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, < 1300)
|
||||||
|
const Functor* get_functor_pointer(Tag, long, Functor * = 0) const
|
||||||
|
#else
|
||||||
const Functor* get_functor_pointer(Tag, long) const
|
const Functor* get_functor_pointer(Tag, long) const
|
||||||
|
#endif
|
||||||
{ return static_cast<const Functor*>(functor.const_obj_ptr); }
|
{ return static_cast<const Functor*>(functor.const_obj_ptr); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user