c – 可调用的结果类型的推导

我试图推断出可调用模板参数的类型,遗憾的是没有成功:

template<typename callable, typename T_out >
class A
{};

template<typename callable>
auto make_A( callable f )
{
  return A<callable, typename std::result_of_t<callable> >{ f };
}

int main()
{
  make_A( []( float f ){ return f;} );
}

上面的代码导致以下错误:

error: implicit instantiation of undefined template 'std::__1::result_of<(lambda at /Users/arirasch/WWU/dev/xcode/tests/tests/main.cpp:31:11)>'
template <class _Tp> using result_of_t = typename result_of<_Tp>::type;

有谁知道如何修理它?

提前谢谢了.

最佳答案 你需要将参数列表传递给std :: result_of,否则就不可能告诉返回类型(毕竟operator()可以重载).

return A<callable, std::result_of_t<callable(float)> >{ f }

(提供A< callable,std :: result_of_t< callable(float)>可以用f构造,但不是这个例子的情况)

点赞