如何从std :: function推断返回值类型



我想使用std::function进行返回值类型,但它不起作用,代码:可以找到可辩论的代码:http://cpp.sh/5bk5

class Test
{
public:
  template <typename R, typename F = std::function<R()>>
  R f(F&& op) {
     op();
  }
  void t() {
    int a = 10;
    f([this, a]() { return "chars"; });
  }
};
int main()
{
   t::Test test;
   test.t();
   return 0;
}

您可以避免模板/ std::function方式并使用 auto进行返回类型。

如果您可以编译C 14,这很容易

// Example program
#include <iostream>
class Test
 {
   public:
      Test(){ }
      template <typename F>
      auto f (F && op)
       { return op(); }
      void t()
       { std::cout << f([this]() { return "chars"; }) << std::endl; }
 };

int main()
 {
    Test test;
    test.t();
    return 0;
 }

如果您只能编译C 11,则必须使用decltype()进行Test::f()

  template <typename F>
  auto f (F && op) -> decltype( op() )
   { return op(); }

最新更新