C++ C++;14';自动';如果能够获取函数返回类型,是否还需要<;的std::result\u>;?
似乎可以使用C++14C++ C++;14';自动';如果能够获取函数返回类型,是否还需要<;的std::result\u>;?,c++,types,return,c++14,auto,C++,Types,Return,C++14,Auto,似乎可以使用C++14auto关键字显示在函数定义的位置,以指示返回类型。在这种情况下,是否仍然需要的std::result_?现在不是过时了吗?是的,绝对是 有时您需要返回类型,但不是函数的结果。假设我有一个向量,我想对每个元素应用一个函数并返回结果。此操作称为map或fmap,我们可以这样实现签名: template <class T, class F, class U = std::decay_t<std::result_of_t<F&(T const&a
auto
关键字显示在函数定义的位置,以指示返回类型。在这种情况下,是否仍然需要的std::result_?现在不是过时了吗?是的,绝对是
有时您需要返回类型,但不是函数的结果。假设我有一个向量
,我想对每个元素应用一个函数并返回结果。此操作称为map
或fmap
,我们可以这样实现签名:
template <class T, class F,
class U = std::decay_t<std::result_of_t<F&(T const&)>>>
std::vector<U> map(std::vector<T> const&, F );
如果F
不能用int
调用,那么实例化foo()
是一个硬编译错误,但是bar()
将从重载集中删除。这在通用代码中非常有价值,因为您可以测试表达式的良好格式
注释<代码>自动
不会告诉您有关函数返回类型的任何信息。如果函数返回调用一个带有一些参数的可调用函数的结果,std::result\u of_t
本身会告诉我该函数在做什么<代码>自动什么也没告诉我
实际上,一个更好的问题可能是。。。如果我们有
decltype
,为什么需要std::result\u的
。这些似乎更密切相关。毕竟,我可以做decltype(x+1)
,我如何用的结果来表达呢decltype
显然更好。事实证明,即使在确定函数调用的结果时,两者之间也存在一定的差距。是的,绝对如此
有时您需要返回类型,但不是函数的结果。假设我有一个向量
,我想对每个元素应用一个函数并返回结果。此操作称为map
或fmap
,我们可以这样实现签名:
template <class T, class F,
class U = std::decay_t<std::result_of_t<F&(T const&)>>>
std::vector<U> map(std::vector<T> const&, F );
如果F
不能用int
调用,那么实例化foo()
是一个硬编译错误,但是bar()
将从重载集中删除。这在通用代码中非常有价值,因为您可以测试表达式的良好格式
注释<代码>自动
不会告诉您有关函数返回类型的任何信息。如果函数返回调用一个带有一些参数的可调用函数的结果,std::result\u of_t
本身会告诉我该函数在做什么<代码>自动
什么也没告诉我
实际上,一个更好的问题可能是。。。如果我们有
decltype
,为什么需要std::result\u的
。这些似乎更密切相关。毕竟,我可以做decltype(x+1)
,我如何用的结果来表达呢decltype
显然更好。事实证明,即使在确定函数调用的结果时,两者之间也存在一定的差异。使用std::result\u of
而不是auto
声明,然后使用decltype
可能更方便。拥有更多的选择和选择权,这总是一件好事。使用std::result\u of
而不是auto
声明,然后使用decltype
可能更方便。有更多的选择和选择,由一个人支配,总是一件好事。