Functor——转发
来源:互联网 发布:淘宝网海魂衫 编辑:程序博客网 时间:2024/05/06 18:42
Functor是自己定义了operator()并可以执行某任务的家伙,它应该是这样的:
template <typename ResultType>
class Functor
...{
public:
ResultType operator()();
private:
};
class Functor
...{
public:
ResultType operator()();
private:
};
但是这有一个问题,我们希望它可以接受参数序列,幸好有typelist得支持:
template <typename ResultType,class TList>
class Functor
...{
};
class Functor
...{
};
为了避免暴露更多的细节,我们使用handle-body(Bridge)封装Functor:
template <typename R,class TList>
class FunctorImpl;
template <typename R,class TList>
class Functor
...{
public:
Functor();
Functor(const Functor&);
Functor& operator=(const Functor&);
explicit Functor(std::auto_ptr<Impl> spImpl);
private:
typedef FunctorImpl<R,TList> Impl;
std::auto_ptr<Impl> spImpl_;
};
class Functor
...{
public:
Functor();
Functor(const Functor&);
Functor& operator=(const Functor&);
explicit Functor(std::auto_ptr<Impl> spImpl);
private:
typedef FunctorImpl<R,TList> Impl;
std::auto_ptr<Impl> spImpl_;
};
我们来讨论Functor对operator()的支持。
转发:
template <typename R,class TList>
class Functor
...{
typedef TList ParmList;
typedef typename TypeAtNonStrict<TList,0,EmptyType>::Result Parm1;
typedef typename TypeAtNonStrict<TList,1,EmptyType>::Result Parm2;
...
public:
R operator()
...{
return (*spImpl_)();
}
R operator(Parm1 p1)
...{
return (*spImpl_)(p1);
}
R operator(Parm1 p1,Parm2 p2)
...{
return (*spImpl_)(p1,p2);
}
};
class Functor
...{
typedef TList ParmList;
typedef typename TypeAtNonStrict<TList,0,EmptyType>::Result Parm1;
typedef typename TypeAtNonStrict<TList,1,EmptyType>::Result Parm2;
...
public:
R operator()
...{
return (*spImpl_)();
}
R operator(Parm1 p1)
...{
return (*spImpl_)(p1);
}
R operator(Parm1 p1,Parm2 p2)
...{
return (*spImpl_)(p1,p2);
}
};
这太可怕了,对于参数无限的情况,这个地方不知道要写多少,但是,请让我们假设这个上限不会太大,而且假定它是某个具体的值,要不这个问题将会很难办,正如typelist的宏一样,假定一个数字,不要一切都完美理想化。
是的,这在编译的时候没问题,但是使用的时候只有一个是正确的,没问题,你永远都在使用那一个正确的,除非你不想编译通过。
到此只差一个FunctorImpl没有处理。
- Functor——转发
- Functor——Impl
- Functor——bind
- Functor——周边
- Functor——支持operator()的构件
- 软件架构设计之Utility模块——Functor
- 【函数式】Monads模式初探——Functor
- WINCE(WM5.0 PPC)下Loki的测试——Functor
- 「学习总结-Haskell-6」Haskell 重要编程模式——Functor,Applicative,Monad
- 转发细节——forward
- template functor
- haskell Functor
- functor 是什么?
- C++ functor
- 【转发】GetModuleHandle——windows API 函数
- Servlet总结02——请求转发
- DRP——重定向与转发
- Servlet总结02——请求转发
- 自定义so的引用
- Tapestry - URL Encode
- NO.1
- asterisk app命令中文翻译
- linux内核编程学习笔记:linux内核体系结构
- Functor——转发
- 学习ant的最佳途径
- 丁磊自述 在浙江大学的演讲
- 求助:一个新人程序员的苦恼和迷惘
- vs2003里水晶报表图标显示
- AutoEventWireUp到底对页面有什么影响?
- VB6.0调用WebServices的简单示例
- WinCE下的物理扇区读写
- Asterisk cmd Transfer