functional objects
来源:互联网 发布:网络信号防雷器价格 编辑:程序博客网 时间:2024/05/23 23:18
template <typename R, typename Arg> class invoker_base {
public:
virtual R operator()(Arg arg)=0;
};
template <typename R, typename Arg> class function_ptr_invoker
: public invoker_base<R,Arg> {
R (*func_)(Arg);
public:
function_ptr_invoker(R (*func)(Arg)):func_(func) {}
R operator()(Arg arg) {
return (func_)(arg);
}
};
template <typename R, typename Arg, typename T>
class member_ptr_invoker :
public invoker_base<R,Arg> {
R (T::*func_)(Arg);
T* t_;
public:
member_ptr_invoker(R (T::*func)(Arg),T* t)
:func_(func),t_(t) {}
R operator()(Arg arg) {
return (t_->*func_)(arg);
}
};
template <typename R, typename Arg, typename T>
class function_object_invoker :
public invoker_base<R,Arg> {
T t_;
public:
function_object_invoker(T t):t_(t) {}
R operator()(Arg arg) {
return t_(arg);
}
};
template <typename R, typename Arg> class function1 {
invoker_base<R,Arg>* invoker_;
public:
function1(R (*func)(Arg)) :
invoker_(new function_ptr_invoker<R,Arg>(func)) {}
template <typename T> function1(R (T::*func)(Arg),T* p) :
invoker_(new member_ptr_invoker<R,Arg,T>(func,p)) {}
template <typename T> function1(T t) :
invoker_(new function_object_invoker<R,Arg,T>(t)) {}
R operator()(Arg arg) {
return (*invoker_)(arg);
}
~function1() {
delete invoker_;
}
};
// example.cpp
bool some_function(const std::string& s) {
std::cout << s << " This is really neat/n";
return true;
}
class some_class {
public:
bool some_function(const std::string& s) {
std::cout << s << " This is also quite nice/n";
return true;
}
};
class some_function_object {
public:
bool operator()(const std::string& s) {
std::cout << s <<
" This should work, too, in a flexible solution/n";
return true;
}
};
int main() {
function1<bool,const std::string&> f1(&some_function);
f1(std::string("Hello"));
some_class s;
function1<bool,const std::string&>
f2(&some_class::some_function,&s);
f2(std::string("Hello"));
function1<bool,const std::string&>
f3(boost::bind(&some_class::some_function,&s,_1));
f3(std::string("Hello"));
some_function_object fso;
function1<bool,const std::string&>
f4(fso);
f4(std::string("Hello"));
}
- functional objects
- Functional
- functional programming
- Functional Programming
- Functional Programing
- Functional Programming
- 使用functional
- STL-functional
- functional/vector
- #include <functional>
- IBM Functional Functional Test 的异常处理
- 突然想到Functional Programming
- Functional Dependencies & MultiValued Dependency
- Functional Programming 的思考
- Trends in Functional Programming
- Functional Reactive Programming
- Oracle ERP Functional Support
- Functional Programming & Template Metaprogramming
- FAT32转NTFS
- question
- 10 ICC
- 软件保护技术(软件注册机制)
- Linux脚本编写基础(五)
- functional objects
- PHP高级语法(四)—— 面向对象(下)
- J2ME平台解析WAP网页
- 应网友要求易筋经联系一下
- Linux 脚本编写基础(六)
- 分布式程序对同一表进行操作时的sql
- 使用批处理删除注册表分支
- some examples of awk & sed
- VI键盘图