您的位置:首页 > 其它

[Boost基础]函数与回调——result_of返回函数的返回值类型

2013-01-21 19:54 441 查看

函数与回调

函数与回调时Boost中较为高级复杂的组件,应用了C++中高级的语言特性和技巧,功能很强大,相应的用法也比较复杂,灵活,不太容易理解和掌握。

Result_of:使用了复杂的技巧来自动推导函数的返回值类型
Ref:可以包装对象的引用,在传递参数时消除对象拷贝的代价,或者将不可拷贝的对象变为可以拷贝
Bind:是C++98标准库中函数适配器的增量,可以适配任意的可调用对象,包括函数指针,函数引用和函数对象,把它们变成一个新的函数对象,它是迈向C++函数式编程的第一步。
Function:是对C++中函数指针类型的增量,它能够容纳任意的可调用对象,可以配合bind使用。
Signals2:它实现了威力强大的观察者模式。

result_of

#pragma  once
#include <boost/utility/result_of.hpp>
#include <string>
#include <iostream>
#include <conio.h>
using namespace std;
using namespace boost;
//result_of:返回函数的返回值类型
void test1()
{
typedef double (*Func)(double d);//定义一个函数指针类型Func(既然是类型,就可以定义变量),它接受一个double类型的参数,返回类型为double
Func func=sqrt;//定义了func变量
result_of<Func(double)>::type x=func(5.0);
cout<<x<<" "<<typeid(x).name()<<endl; //2.23607 double
//result_of虽然很小,但它用到了很多C++的高级特性,如模板偏特化和sfinae,并且部分依赖于编译器的能力。它不仅可以用于函数指针,更重要的是用于函数对象进行泛型编程。
}
void test(char t)
{
cout<<"press key====="<<t<<endl;
switch (t)
{
case '1':test1();break;
// 	case '2':test2();break;
// 	case '3':test3();break;
// 	case '4':test4();break;
case 27:
case 'q':exit(0);break;
default: cout<<"default "<<t<<endl;break;
}
}
int main()
{
while(1)
{
test(getch());
}
return 0;
}

网上实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: