可调用的结果类型的推导

时间:2016-10-26 14:11:50

标签: c++ c++14 callable type-deduction

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

 String dateString = "26-10-2016";
        convertDateFormat(dateString);

 private Date convertDateFormat(String data) {
    try {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
        Date date = simpleDateFormat.parse(data);
        Log.d(TAG," test==>"+date);
        return date;
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return null;
}

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

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;} );
}

有谁知道如何修复它?

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

您需要将参数列表传递给std::result_of,否则无法告知返回类型(毕竟operator()可能会超载)。

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

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