C++ 函数模板格式

2023-12-06

只是有一个关于类模板的问题:

对于以下代码,该函数运行完全正常,但我很困惑为什么/如何在不提供迭代器的类/类型的情况下运行填充函数(为什么不需要提供迭代器类型):

#include <vector>
#include <iostream>
#include <typeinfo>

template<typename Iter>
void fill(Iter first, Iter limit, int value){
  while (first != limit) {
    *first = value;
    ++first;
  }
}
int main() {
  std::vector<int> vec1 {2, 4, 6, 1, 9};
  fill(vec1.begin(), vec1.end(), 7);
}

无论如何,我的实际问题如下:

我只是想做template <typename Iter, typename A>,所以我可以指定函数中值变量的数据类型(而不是必须在函数模板中显式命名 int)

然而,当我尝试fill<int>(...)按照这个思路,程序根本无法正确编译:

#include <vector>
#include <iostream>
#include <typeinfo>

template<typename Iter, typename A>
void fill(Iter first, Iter limit, A value){
  while (first != limit) {
    *first = value;
    ++first;
  }
}
int main() {
  std::vector<int> vec1 {2, 4, 6, 1, 9};
  fill<int>(vec1.begin(), vec1.end(), 7);
}

基本上我只是好奇如何更改模板以允许单个fill<datatype of value>(arg1,arg2...)函数仍然正确接受迭代器而无需显式命名它们。

Thanks!

edit: 最终使用::fill!谢谢大家提供的知识和信息!


你的实际问题

您将第二个函数模板称为错误的。如果您想指定特定的模板参数,则必须在您真正想要指定的参数之前指定每个参数。

e.g.

fill<std::vector<int>::iterator, int>(std::begin(vec), std::end(vec), 5);

即使这样你的代码也无法编译。

第二个原型无法编译的原因是 ADL 正在寻找另一个名为fillstd命名空间与您的原型具有相同的原型,并且无法决定是否使用您的版本或其中的版本std。要解决这个问题,只需调用fill像这样:

::fill(vec.begin(), vec.end(), 5);

这是明确调用fill在全局命名空间中。


你的第一个问题:

函数模板之所以被称为函数模板,是因为它实际上是一个模板,将用于编译器将要使用的实际函数,或者您将显式实例化的函数。

编译器计算出调用站点的参数类型,并根据该类型调用函数模板的正确实例化。

它类似于函数参数重载。

例如。这:

template<typename T>
auto fn(T arg){
    std::cout << arg << std::endl;
}

auto main() -> int{
    fn(1); // compiler sees you pass an int
    fn(1.0); // compiler sees you pass a double
}

与此相同:

auto fn(int i){
    std::cout << i << std::endl;
}

auto fn(double d){ // heh, double d
    std::cout << d << std::endl;
}

auto main() -> int{
    fn(1);
    fn(1.0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 函数模板格式 的相关文章

  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • C++:初始化静态字符串成员

    我在 C 中初始化静态字符串成员时遇到一些问题 我有几个类 每个类都包含几个表示 id 的静态字符串成员 当我通过调用静态函数初始化变量时 一切都很好 但是 当我想为一个变量分配另一个变量的值时 它仍然保留空字符串 这段代码有什么问题 st
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 捕获另一个进程未处理的异常

    我想知道我是否可以捕获我开始使用 Process Start 的另一个进程抛出的未处理的异常 我知道我可以用这个捕获标准错误link http social msdn microsoft com Forums en US csharpgen
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 如何使用 xamarin 表单提示用户进行地理定位

    我正在 Xamarin Forms 应用程序中开发一个应用程序 需要请求地理位置权限 如果获得许可 它需要从设备获取地理位置数据 然后将地理位置坐标放入 Forecast io URL 我正在使用 James 的 Geolocator 插件
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat
  • 如何在用户空间程序中使用内核 libcrc32c (或相同的函数)?

    我想在我自己的用户空间程序中进行一些 CRC 检查 我发现内核加密库已经在系统中 并且支持 SSE4 2 我尝试直接 include

随机推荐

  • P文本添加到html文本中

    我知道这方面有很多主题 而且我已经查看了所有主题 但其中没有一个解决方案适用于我 我在页面编辑器的 文本 一侧放置了一个短代码来运行响应式滑块的 jscript 然而 当我加载页面时 源代码在每一行 JavaScript 后面都有大量的段落
  • 我应该在 Flutter 插件的 Swift 本机代码中传递哪个视图控制器?

    我试图在我的 Flutter 插件中显示来自 Swift 本机代码的 Adcolony 广告 这就是我的 swift 代码的样子 if let interstitial self interstitial interstitial expi
  • MacOS:以编程方式查找串行端口?

    MacOS 中是否有库调用来列出可用的串行端口及其设置 希望有一天能以最小的难度移植到 iOS 上 我宁愿不system ls dev tty and system stty 如果可能的话 您可以使用 IOKit 调用来查找串行端口 See
  • NSTimer Category + Blocks 实现替换选择器

    我对块和 Objective C 很陌生 我正在尝试使用两者来编写我的第一个类别 我的想法是在 NSTimer 上创建一个类别 它将接收一个块作为参数 并且该块将在选择器调用中使用 现在我有这个 NSTimer Additions h im
  • 可靠的数据服务

    如何确保我的文件服务可靠且可扩展 它可以处理多少个并行请求 我正在思考超越硬件能力和带宽的问题 我正在关注在 java servlet 中流式传输大文件 如果这些是静态文件 只需链接到它directly 所有像样的 servlet 容器 应
  • 错误:Tensorflow CNN 维度

    你好 我是 Tensorflow 新手 尝试使用 CNN 运行 cifar10 数据集 我的网络由三层构成 例如 卷积 最大池化 全连接层 Softmax层 下面是我的模型的张量流代码 15 def model X w w2 w o p k
  • 如何在vue2.7中删除slot-scope

    我将 vue 应用程序升级到 vue2 7 并且我想从我的应用程序中删除 slot scope 因为它在 vue3 中已被删除 所以在示例中 我看到 vue2 是这样的
  • TSQL 返回结果是否比 SQL Server 中的存储过程更快

    我有一个以前运行良好的存储过程 需要 4 到 5 秒才能得到结果 过去两个月我没有使用这个存储过程 当我现在调用相同的过程时 需要 5 分钟以上才能产生结果 过去两个月没有记录填充到我的源表中 我转换了存储过程并作为 TSQL 块执行 它恢
  • 为什么 C++ 犰狳中的一些特征向量符号与 Python 和 R 不同

    我想知道为什么 Armadillo 的特征向量中元素的符号与 Python 即 numpy 和 R 等其他语言相反 例如 C using namespace arma vec eigval mat eigvec C 11 initializ
  • 合并配置单元中的两列并在运算符之间使用

    我在配置单元中有一个带有列的登录详细信息表 日期 时间 用户 我正在尝试编写一个查询 它可以选择在两个日期之间登录的用户 同时也考虑到时间 例如 我想知道在这段时间里登录过的用户10 12 2012 02 30 00 and 28 12 2
  • 如何将包含 HTML 实体和无效字符的文本转换为其 UTF-8 等效项?

    我正在更改标题 因为我不知道特殊的破损窗口字符给我带来了问题 使问题看起来像重复的 如何转换 HTML 实体 0 9 类型的字符引用和 a fA F0 9 无效的字符引用 和无效的 Windows 字符 chr 151 到其 UTF 8 等
  • PHP磁盘总空间

    我需要有关 disk total space 函数的帮助 我的代码中有这个 Name Email Diskspace Available
  • 检测草地图像中的植物

    我是计算机视觉领域的新手 我想检测草地图像中的某种植物 Original Image Canny Edge Detection Algorithmus Hough Line Transform After Edge Detection 我已
  • 如何在Web服务器上获取用户的IP地址?

    我在将用户的 IP 地址获取到 Web 服务器时遇到问题 我正在使用这段代码 To get the local IP address string sHostName Dns GetHostName IPHostEntry ipE Dns
  • JavaScript 中的串联继承与类继承

    当我一开始看到连接继承时 它对我来说就像一个组合 但人们一直将其命名为继承 然而 类使用原型来创建将对象连接在一起的原型链 现在的问题是 如果串联继承和类继承都做同样的事情 该使用哪一个 这是两种情况的示例串联继承 function Per
  • Reactjs 中的 HTML 表格行跨度

    当我使用地图并想要制作这样的表格时我很困惑 有数据 const arr no 1 name david fruit apple type typeName red apple typeName green apple no 2 name d
  • 在 C# 中将包含多个 XML 文件的单个大文件读取到多个 xml 记录中

    我有一个文件 它实际上包含多个相同格式的 XML 文件 因此该文件本身不是有效的 XML 例如
  • ASP.NET自定义控件,模板字段可以有属性吗?

    例如
  • 在Python中使用更多的小数

    我已经有一个使用二分法来确定某个值的代码 问题是我需要一个如此精确的值 超过 15 位小数 并且在某些时候 python 停止获取更小的数字 我知道 Decimals 库 但是我真的必须将代码中的每个参数重写为 Decimals param
  • C++ 函数模板格式

    只是有一个关于类模板的问题 对于以下代码 该函数运行完全正常 但我很困惑为什么 如何在不提供迭代器的类 类型的情况下运行填充函数 为什么不需要提供迭代器类型 include