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