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

时间:2016-12-01 00:38:30

标签: c++ c++11 templates lambda template-deduction

我想使用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;
}

1 个答案:

答案 0 :(得分:2)

您可以避免使用模板/ <div class="debug"> <span class="timestamp">[09:33:04.137] </span> <span class="message"> <ul class="tree"> <li><a href="#" class="exception">Exception message</a> <ul> <li><a href="#" class="exception">Innereception</a></li> <li><a href="#" class="exception">Stacktrace</a></li> <li><a href="#" class="exception">Bla</a></li> </ul> </li> </ul> </span> <br> </div>方式,并使用std::function作为返回类型。

如果你可以编译C ++ 14那很容易

auto

如果只能编译C ++ 11,则必须使用// 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; } decltype()

Test::f()