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 == 121
val == 4.4
val == 4.3
val == abcdefg
请按任意键继续. . .