通过函数引用检索返回类型?

时间:2013-03-31 16:30:56

标签: c++ templates metaprogramming

嗨假设我有一个type typedef ReturnType(ObjectType :: * fun1)(Arg0);是否有可能通过对函数的一个引用来获取返回类型和参数的数量?

例如现在我有:

template <typename ObjectType, typename ReturnType, typename Arg0, typename Arg1  >
Private::value_fun< ObjectType, TYPELIST_2(Arg0, Arg1), ReturnType > val_mem_funcion(typename Private::value_fun<ObjectType, TYPELIST_2(Arg0, Arg1), ReturnType>::FunctionType func, Arg0 arg0, Arg1 arg1) {
    return Private::value_fun <ObjectType, TYPELIST_2(Arg0, Arg1), ReturnType>( func, arg0, arg1 );
}

我的电话是:

std::for_each( test.begin(), test.end(), utils::val_mem_funcion<Test, int>(&Test::sum, 33, 44)  );

但是如果我可以移除模板参数并使它像:

那样会好得多
std::for_each( test.begin(), test.end(), utils::val_mem_funcion(&Test::sum, 33, 44)  );

1 个答案:

答案 0 :(得分:0)

给定函数T f();,可以像这样提取返回类型(需要C++11):

typedef decltype(f()) ReturnType;

现在ReturnType等于在上面输入T