result_of学习

来源:互联网 发布:paxos算法推导 编辑:程序博客网 时间:2024/05/11 22:29

    result_of是一个小但很有用的组件,可以帮助程序员确定一个调用表达式的返回类型,主要用于泛型编程和其他Boost库组件,它已被收入TR1。

result_of位于名字空间boost,为了使用result_of组件,需要包含头文件<boost/utility/result_of.hpp>,即:

    #include<boost/utility/result_of.hpp>

    using namespace boost;


一般来说result_of在一般编程中很少会被使用到,可能会在一些模板封装里面由于对模板要处理的类型不能够确定,可以使用这个其来辅助处理,避免了算法相同,就因为对函数类型不能够确定而麻烦地分开写。下面是result_of使用例子:

#include <iostream>#include <string>#include <boost/utility/result_of.hpp>using namespace std;using namespace boost;template<class type>type square(type x) { return x; }int square(int x) { x = 11; return (x * x); }template<class Fun, class Arg> void test_result(const Fun& fun, Arg arg) { typename boost::result_of<Fun(Arg)>::type val = fun(arg); std::cout << "val == " << val << std::endl; }typedef int (*TiSquare)(int);typedef double (*TdSquare)(double);typedef float (*TfSquare)(float);typedef string (*TsSquare)(string);void main(){//square<double>(2);int x = 2;test_result<TiSquare,int>(&square,x); double y = 4.4;test_result<TdSquare,double>(&square,y);float z = 4.3f;test_result<TfSquare,float>(&square,z);string w = "abcdefg";test_result<TsSquare,string>(&square,w);}
结果:
val == 121val == 4.4val == 4.3val == abcdefg请按任意键继续. . .


原创粉丝点击