推导函数指针返回类型

时间:2013-09-09 09:47:39

标签: c++ c++11 function-pointers

我认为代码会更好地说明我的需求:

template <typename F>
struct return_type
{
  typedef ??? type;
};

这样:

return_type<int(*)()>::type -> int
return_type<void(*)(int,int)>::type -> void

我知道decltyperesult_of,但他们需要传递参数。我想从单个模板参数推断出函数指针的返回类型。我无法将返回类型添加为参数,因为这正是我想要隐藏的内容......

我知道有一个解决方案可以提升,但是我不能使用它,并试图从提升中挖掘它会导致一个惊人的失败(正如它经常那样)。

欢迎使用C ++ 11解决方案(只要VS2012支持)。

1 个答案:

答案 0 :(得分:11)

如果你可以使用可变参数模板(11月'12 CTP),这应该有效:

template <class F>
struct return_type;

template <class R, class... A>
struct return_type<R (*)(A...)>
{
  typedef R type;
};

Live example

如果您不能使用可变参数模板,则必须提供0,1,2,...参数的特定专业化(手动或预处理器生成)。

修改

正如评论中所指出的,如果你也想使用可变参数函数,你必须添加一个额外的部分特化(或者在无变量模板的情况下为每个参数计数添加一个):

template <class R, class... A>
struct return_type<R (*)(A..., ...)>
{
  typedef R type;
};