![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++ boost bind
文章平均质量分 64
炼气散人
等儿子高考后,或许会回来
展开
-
function object研究之七 is_placeholder
这里看一下is_placehoder模板在is_placeholder.hpp中,有如下定义:namespace boost{template struct is_placeholder{ enum _vt { value = 0 };};} 在arg.hpp中,还有几个偏特化版本的定义:#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPEC原创 2012-12-07 11:20:01 · 4010 阅读 · 0 评论 -
function object研究之三
支持返回类型目前的function_object_ref版本只能支持void返回类型。我希望能够让它支持多种返回类型,最简单的方法是添加一个模板参数。请看下面的代码:templateclass function_object_ref{public: explicit function_object_ref(function_object_type & object):object_(&原创 2011-10-08 19:51:12 · 3173 阅读 · 0 评论 -
function object研究之十七 list_av_N
已经走了好远好远,现在开始回到我们的目标list_av_N模板:template struct list_av_1{ typedef typename add_value::type B1; typedef list1 type;};template struct list_av_2{ typedef typename add_value::type B1;原创 2012-12-08 16:01:19 · 2424 阅读 · 0 评论 -
function object研究之十五 list1分析
首先看一下bind.hpp中的list0模板定义:class list0{public: list0() {} template T & operator[] (_bi::value & v) const { return v.get(); } template T const & operator[] (_bi::value const & v) const {原创 2012-12-08 15:44:18 · 2605 阅读 · 1 评论 -
function object研究之十三 result_traits
result_traits模板定义在bind.hpp中,属于_bi namespace中。// result_traitstemplate struct result_traits{ typedef R type;};#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCT原创 2012-12-08 14:45:24 · 2841 阅读 · 0 评论 -
function object研究之十 storageN
现在看一下storageN模板,定义在storage.hpp文件中:先来个普通的:namespace _bi{// 1template struct storage1{ explicit storage1( A1 a1 ): a1_( a1 ) {} template void accept(V & v) const { BOOST_BIND_原创 2012-12-07 14:16:45 · 2841 阅读 · 0 评论 -
function object研究之五
巧妙的检测占位符boost提供了从_1到_9的占位符,它们是9个变量。这些变量本质上都是一个模板类的实例化对象,特殊之处在于这个模板类arg具体定义如下:boost::arg _1;boost::arg _2;boost::arg _3;boost::arg _4;boost::arg _5;boost::arg _6;boost::arg _7;boost::arg _8;boo原创 2011-10-09 17:26:43 · 3476 阅读 · 1 评论 -
function object研究之二
如何传递引用>提到可以让function object继承自unary_function,现在来试一下.class B : public unary_function{public: B():x_(0){ } void operator()(int x){ cout<<++x_<<endl; } int x() const{原创 2011-10-08 14:37:08 · 3238 阅读 · 0 评论 -
function object研究之十八 bind_t
bind_t模板定义在bind.hpp中:#ifndef BOOST_NO_VOID_RETURNStemplate class bind_t{public: typedef bind_t this_type; bind_t(F f, L const & l): f_(f), l_(l) {}#define BOOST_BIND_RETURN return#inc原创 2012-12-08 20:42:49 · 2891 阅读 · 1 评论 -
function object研究之十四 unwrap
template struct unwrapper{ static inline F & unwrap( F & f, long ) { return f; } template static inline F2 & unwrap( reference_wrapper rf, int ) { return rf.get()原创 2012-12-08 14:52:47 · 3081 阅读 · 0 评论 -
function object研究之十二 reference_wrapper
reference_wrapper模板:(ref.hpp文件中)template class reference_wrapper{ public: typedef T type;#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) explicit reference_wrapper(T&原创 2012-12-08 13:57:29 · 4315 阅读 · 0 评论 -
function object研究之十一 addressof
来看看boost::detail::addr_impl_ref模板,在addressof.hpp文件中:template struct addr_impl_ref{ T & v_; inline addr_impl_ref( T & v ): v_( v ) {} inline operator T& () const { return v_; }private:原创 2012-12-08 13:20:42 · 2632 阅读 · 0 评论 -
function object研究之八 add_value_*
东西太多,有必要停下来仔细看一下几个基本的模板类,这里先看一下add_value_*模板。template struct add_value_2{ typedef boost::arg type;};template struct add_value_2{ typedef _bi::value type;};template struct add_value{原创 2012-12-07 10:47:59 · 3480 阅读 · 2 评论 -
function object研究之十九 bind
终于到了最后一篇(至少目前我认为是最后一篇) vector::iterator itor = std::find_if(v.begin(), v.end(), boost::bind(Foo, _1));上面的代码find_if的第三个参数是bind的返回值,看一下bind定义:template _bi::bind_t::type> BOOST_BIND(F原创 2012-12-08 20:53:22 · 2611 阅读 · 0 评论 -
function object研究之六 bind example
这个系列主要希望弄明白boost::bind的实现原理,回到研究之四的简单使用的例子。稍微加点代码,也绑定Foo函数。#include #include #include #include using namespace std;bool Foo(int x) { return x >= 2;}typedef bool (*FooPointer)(int x);int原创 2012-12-02 22:30:58 · 2924 阅读 · 2 评论 -
function object研究之四
将函数指针封装成function object在前面介绍了function object是STL算法的主要使用方式。如果能将现有的函数指针,函数,成员函数等等都封装成function object,就可以获得STL算法的支持,而且可以减少专门编写function object的工作量。基本思路仍然是构造一个function object,内部能够转调函数指针。bool foo(int x){原创 2011-10-09 17:19:06 · 3096 阅读 · 1 评论 -
function object研究之一
概念Function object首先是一个类,它实现了函数调用操作符T operator()(T), T可以是void类型。最简单的示例:for_each#include #include #include using namespace std;class A {public: A(): x_(0) { } void operator()(int x) {原创 2011-10-08 14:32:48 · 3890 阅读 · 0 评论 -
function object研究之十六 listN分析
list2 通过继承storage2来包含两个成员a1_和a2_struct logical_and;struct logical_or;template class list2: private storage2{private: typedef storage2 base_type;public: list2( A1 a1, A2 a2 ): base_typ原创 2012-12-08 15:50:11 · 2376 阅读 · 0 评论 -
function object研究之九 visit_each
先看一下boost::visit_each模板,定义在visit_each.hpp文件中namespace boost { template inline void visit_each(Visitor& visitor, const T& t, long) { visitor(t); } template inline void visit_each(Visit原创 2012-12-05 23:55:01 · 2799 阅读 · 0 评论