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