在处理模板时,如何避免在函数头和主体中两次不同的时间声明同一类型?

达里奥

我编写了此函数,该函数返回由两个迭代器定界的范围内的值的平均值:

template<class InputIterator>
typename std::decay<decltype(*std::declval<InputIterator>())>::type mean (InputIterator first, InputIterator last) {
  return std::accumulate(first, last, typename std::decay<decltype(*std::declval<InputIterator>())>::type ()) / std::distance(first, last);
}

从迭代器推断出内部使用和返回的值类型。由于类型推导的语法非常繁琐,我想知道是否有办法避免两次使用它。

我知道我可以添加第二个模板参数并将其默认值设置为值类型,但是我不相信,因为可能会指定另一种值类型,因此我想排除这种可能性。

尼科斯(Nikos Athanasiou)

您可以使用别名模板形成通用的typedefyourType

template<class InIt>
using yourType = typename decay<decltype(*declval<InIt>())>::type;

template<class InIt>
yourType<InIt> mean(InIt first, InIt last) 
{
    return accumulate(first, last, yourType<InIt>()) / distance(first, last);
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何处理同一类型中存在和缺失的密钥?

如何判断两个模板类是否为同一类型

如何使两个不同特征中的依赖类型被识别为同一类型

C#-如何在两个不同的dll中引用同一类型?

由于类加载器不同而从同一耳中的两次不同战争中加载同一类时,发生ClassCastException

我们可以在同一类型上使用两次寄存器插值器吗

当析构函数在类主体中声明为unique_ptr作为同一类的成员时发生编译器错误

如何连接两个扩展/继承同一类型的两个不同类型的类型化数组?

如何查看两个ArrayList是否来自同一类型

如何为带有两个参数的类型创建仿函数实例,其中两个参数必须为同一类型?

为什么这两个对象在飞镖中不是同一类型?

避免在 Spring Batch 中两次处理同一个文件

SQL计算同一类型中的男性和女性人数

当两次使用同一组件时如何避免多个http请求

如果函数参数是同一类型,为什么在Java中强制转换函数调用的两个参数是多余的?

如何在C ++中为同一类定义不同的类型

如何在Java中提示两个类型参数实际上是同一类型?

如何从函数返回单一类型

如何杀死由同一类中的不同函数启动的子进程

当需要两次反向传播时,如何避免重新计算一个函数?

在 R 中循环时处理来自同一用户的数据两次

在 SQL 中两次使用相同的输出时,如何避免重复函数?

在Scala中,如何限制多个参数必须是同一类型内的一个类型?

尝试在数据框中添加列时出现“ startPos和长度必须为同一类型”错误

无论如何,要避免使用Spring Batch处理同一文件两次?

如何在JavaScript的同一类中调用函数?

如何在 for 循环中使用多处理并行化对同一个函数的两次调用,并使用不同的参数?

Javascript加载两次,在同一数组上声明不同的值,如何保持每个值?

如何为UITabBarController中包含两次的同一故事板引用设置不同的UITabBarItems?