gpt4 book ai didi

c++ - 如何正确推断模板的返回类型?

转载 作者:搜寻专家 更新时间:2023-10-31 00:15:30 25 4
gpt4 key购买 nike

免责声明:我看过this question我想问的是如何使用已接受的答案中建议的 decltype

基本上,我尝试(一点为了乐趣,一点为了方便,还有一点为了学习目的)为标准算法实现小型包装器,以便在应用于整个容器时简化它们的使用。主要思想是摆脱 .begin().end() 并仅指定必须应用算法的容器。

然后,我想知道是否有可能(顺便提一下,这并不愚蠢)从标准算法返回类型本身推断出我的包装器的返回类型。

目前,我尝试了以下方法(对于 std::count):

template<class Cnt,
class T>
inline
auto count(Cnt _cnt, const T& _val) -> decltype(std::count){}

但它在编译时给了我一个错误:

Failed to specialize function template ''unknown-type' ragut::count(Cnt,const T &)'

我认为仅仅说 decltype(std::count) 可能还不够,并且假设它要求像这样的更具体的参数:

decltype(std::count<std::iterator<std::input_iterator_tag,Cnt::value_type> >)

但这给出了同样的错误。

我想知道这样做是否真的不愚蠢并且可能这样做。

最佳答案

decltype(x) 表示表达式 x 的类型。换句话说,您正在尝试创建一个返回函数模板(在第一种情况下)或函数(在第二种情况下)的函数。那行不通的。您想要 调用std::count 的类型,如下所示:

template<class Cnt,
class T>
inline
auto count(Cnt _cnt, const T& _val)
-> decltype(std::count(std::begin(_cnt), std::end(_cnt), _val)))
{ }

关于c++ - 如何正确推断模板的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com