如何正确推断模板的返回类型
How to infer correctly a return type for a template?
免责声明:我已经看到了这个问题,我正是在问decltype
,在接受的答案中建议,可以用于此
基本上,我尝试(有点好玩,有点方便,有点学习目的(为标准算法实现小包装器,以简化它们应用于整个容器的使用。主要思想是摆脱.begin()
和.end()
,只需指定必须应用算法的容器。
然后,我想知道是否有可能(顺便说一下,这并不愚蠢(从标准算法返回类型本身推断我的包装器的返回类型。
目前,我尝试了以下方法(对于std::count(:
template<class Cnt,
class T>
inline
auto count(Cnt _cnt, const T& _val) -> decltype(std::count){}
但它在编译时给了我一个错误:
无法专用化函数模板"未知类型"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)))
{ }
如果您指定正确的模板参数,它将起作用。在这种情况下,这些将是<typename Cnt::const_iterator, typename Cnt::value_type>
相关文章:
- 如何获取std::result_of函数的返回类型
- 返回类型不正确
- clang 拒绝具有尾随 decltype 返回类型的模板调用是否正确,具体取决于其重载之一?
- 如何允许编译器推断出正确的返回类型以进行模板get函数
- 自动无法推断出正确的返回类型
- C 模板:返回新类型的正确方法
- 如何使模板化运算符推断出正确的返回类型
- 正确使用 std::enable_if 作为返回类型
- 无法确定正确的返回类型
- 在C++中,将double转换为long的类型返回了不正确的值
- Doxygen不能正确确定返回类型
- 如何正确推断模板的返回类型
- C++返回类型的泛型集合的正确方法
- 用于测试 func(args) 格式是否正确以及是否具有必需的返回类型的特征
- 导出依赖类型的静态成员函数返回值的正确语法
- 操作符++的正确返回类型
- 有条件地从模板函数返回不同类型的正确方法
- 哪个编译器是正确的? 'template'在需要模板化返回类型之前?
- 如何正确找出 lambda 的返回类型
- 如何正确地编写尾随返回类型