c++ - 推导函数指针返回类型

标签 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 但它们需要传递参数。我想从单个模板参数中推断出函数指针的返回类型。我不能将返回类型添加为参数,因为这正是我想在这里隐藏的内容...

我知道在 boost 中有一个解决方案,但我不能使用它,并且试图从 boost 中挖掘它导致了一个惊人的失败(正如它经常发生的那样)。

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

最佳答案

如果您可以使用可变参数模板(2012 年 11 月 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;
};

关于c++ - 推导函数指针返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18695564/

相关文章:

c++ - 您将如何使用 C++11 初始化函数结果的 const vector ?

c++ - 计算字符串中元音的个数

c++ - 如何获取 clang-format 以对齐链式方法调用

c++ - 如何将C++模板方法的返回类型声明为其他类中静态方法的返回类型?

c++ - 没有从 const_iterator 类型的返回值到迭代器的可行转换

c++ - 备用函数语法/函数原型(prototype)?

指向重写方法的 C++ 方法指针

c++ - 在 C/C++ 中取消初始化变量

c++ - 在命名空间范围之外定义命名空间的变量成员

c++ - 自定义排序和映射时更喜欢函数指针还是函数对象?