【发布时间】:2015-01-10 18:39:35
【问题描述】:
假设我有一个模板函数,它接受一个参数,它是一个函数(它可以是 std::function、lambda 或实际函数指针)。一个说明问题的愚蠢例子:
template<typename F,typename A,typename B = typename std::result_of<F(A)>::type>
B blabla(F &&f)
{
return f(A())/3;
}
我可以用 std::result_of::typename 引用 f 的返回类型,假设我有 A 的类型,但我希望编译器从 F 的第一个参数推导出类型 A。 (如果我写
template<typename A,typename B>
B blabla(const std::function<B(A)> &f)
{
return f(A())/3;
}
编译器在推导 A 和 B 时有问题(尤其是当它不是 std::function 而是 lambda 时),所以这不是正确的方法。)
【问题讨论】:
-
这是否描述了您的问题? stackoverflow.com/questions/27851111/…
-
... 或者这个:stackoverflow.com/questions/26665152/….
-
仅限于您列出的三种情况(
std::function、C++11(非泛型)lambda 和普通函数指针),这是可行的,但无法推广到任意函子或泛型lambdas。 -
5gon12eder, WhozCraig:谢谢,但不是真的,在这些情况下,他们并不真正想要传递函数的参数。
-
T.C.:当然,它必须从somewhere获取类型。