使用模板化构造函数的非模板化类的实例解释为函数定义?

2023-11-30

以下代码最好地说明了我的问题:

#include <fstream>
#include <iterator>

class Bar
{
    public: template <class Iterator> Bar(Iterator first, Iterator last) {}
};

void foo(const Bar& bar) { }

int main(int argc, char** argv)
{
    std::ifstream file("file.txt");

    Bar bar(std::istream_iterator<char>(file), std::istream_iterator<char>());

    foo(bar); // error C2664: 'foo' : cannot convert parameter 1 from 'Bar (__cdecl *)(std::istream_iterator<_Ty>,std::istream_iterator<_Ty> (__cdecl *)(void))' to 'const Bar &'
              // with
              // [
              //     _Ty=char
              // ]
              // Reason: cannot convert from 'overloaded-function' to 'const Bar'
              // No constructor could take the source type, or constructor overload resolution was ambiguous

    return 0;
};

下面是一些类似的实例bar不会引起同样的歧义:

Bar bar = Bar(std::istream_iterator<char>(file), std::istream_iterator<char>());

and

std::istream_iterator<char> start(file);
std::istream_iterator<char> end;
Bar bar(start, end);

我的问题是,第一个声明是什么?bar这会导致它被误解吗?

注意:我正在使用 Visual Studio 2010 (10.0.30319.1) 进行测试


ArunMu 获得部分功劳,这确实是一个例子最令人烦恼的解析,但该术语是在 Meyer 的《Effective STL》(第 1 章第 6 项)中创造的,而不是在 Exceptional C++ 中创造的。

It is被解释为函数指针((__cdecl *)错误的一部分是完全泄露的),显然 C++ 标准要求它以这种方式解释。有人有这方面的章节/诗句引用吗?

还有另一种解决方案可以提供消歧作用。在每个参数周围添加一组附加括号也有效:

Bar bar( (std::istream_iterator<char>(file)), (std::istream_iterator<char>()) );

还值得指出的是,正如我最初所想的那样,该问题与模板无关。

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

使用模板化构造函数的非模板化类的实例解释为函数定义? 的相关文章

随机推荐

  • 如何使用android.drm框架

    我正在开发一个基于 DRM 的 Android 应用程序 应用程序旨在在下载并获得对文件 音频 视频 的控制访问权限后对 音频 视频 文件进行加密 防止文件 音频 视频 复制和粘贴并使文档过期 从而无法再查看它们 为此我使用 android
  • ASP.NET 计时器事件

    protected void SubmitButtonClicked object sender EventArgs e System Timers Timer timer new System Timers Timer line 1 ge
  • JUnit 如何查找测试?

    我假设 JUnit 找到了测试 在派生自的类中 junit framework TestCase 通过寻找带有注释的方法 Test 但是 我已经包含了一个测试http 256stuff com sources jenkins hash ja
  • 如何根据列名称对数据框进行子集化?

    我有这个数据框 dput df structure list Server structure c 1L 1L 1L 1L 1L 1L Label servera class factor Date structure 1 6 Label
  • 创建位图图像 WPF

    我有一个包含需要在屏幕上显示的图像数据的 ushort 目前我正在创建一个 Windows System Drawing Bitmap 并将其转换为 BitmapImage 但这感觉像是一种缓慢而无效的方法 有人知道创建 ushort 的
  • facet_wrap 每个面板的轴相等

    我想用facet wrap每个面板的轴可能不同 但在一个面板内x and y轴应该具有相同的比例 例如看下面的图 df lt read table text x y g 1 5 a 2 6 a 3 7 a 4 8 a 5 9 b 6 10
  • Access - 比较两个表并更新或插入第一个表中的数据

    在我的 Access 数据库中 我有两个表 Table1 PersNum Name Surname 2321 Lenora Springer 2320 Donya Gugino 3326 Leland Wittmer 4588 Elmer
  • 如何使用QML/QtLocation模块在地图上显示大量离线数据?

    我正在使用 QML 及其新的 QtLocation 模块 gt Qt5 4 创建离线 Slippy Map 我很容易地用离线缓存来显示图块 现在我想向此地图添加自定义数据 约 7000 个机场的列表 这个巨大的列表必须根据缩放级别进行聚类
  • 当控制器实例化 Web API DI 中接口的正确实现时,“魔法”发生在哪里?

    在我看来 当涉及到 Web API 控制器中的 DI 时 就像是从帽子里变出兔子一样 我明白了 0 Web API项目中的Controller可以通过各种需要实例化的类来调用 所有的类都实现了Controller所依赖的接口 例如 使用以下
  • 选中的复选框将在分页中保留

    我正在做一个 php 脚本 其中我需要记住选中的复选框并将其保存到所有数据库中 不幸的是 我的代码仅保存我选中复选框的当前页面 但另一个复选框未选中 示例 在第 1 页中 我检查了 3 个项目 在第二页上 我检查了项目 当我单击提交按钮时
  • 将地理坐标从度数转换为十进制

    我想将我的地理坐标从度数转换为小数 我的数据如下 lat long 105252 30 25 264 9 01 331 105253 30 39 237 8 10 811 105255 31 37 760 8 06 040 105258 3
  • Ruby gets() 未返回正确的字符串[重复]

    这个问题在这里已经有答案了 在听到 Ruby 的所有优点后 我今天决定尝试一下 Ruby 但到目前为止 它只是给我带来了困难 很久以前 我在学习 Python 时制作了一个 搜索引擎 它只是将数据存储在数组中并检查搜索关键字是否在其中 并且
  • Flask App:函数运行时更新进度条

    我正在 Flask 中构建一个相当简单的 Web 应用程序 它通过网站的 API 执行功能 我的用户使用他们的帐户 URL 和 API 令牌填写表单 当他们提交表单时 我有一个 python 脚本 可以通过 API 从他们的帐户导出 PDF
  • 在数组中的每个元素之间使用 MATLAB linspace

    使用 MATLAB 我想在数组中的每个点之间进行线性插值 Using interpolate将以非线性方式完成 我想做的类似于生成低通滤波器系数 我已经想出了一个解决方案 但我想避免使用for loops a 0 0 1 0 0 Input
  • 身份验证后,flask-login 会随机使会话失效

    我正在使用烧瓶登录https flask login readthedocs io en latest用于会话管理 用户首先登录 login html 应用程序并转到 home html 但是 当用户通过身份验证并单击不同的链接后 它将踢出
  • 如何在字符串数组中搜索字符串

    在其他帖子中寻找答案后 我觉得我必须问这个问题 我在看JavaScript 中如何检查数组是否包含对象 and 查找某个项目是否在 JavaScript 数组中的最佳方法 并且无法让代码在那里工作 我正在将 html 嵌入代码捕获到数组中
  • WPF 控件嵌套属性数据绑定

    我正在尝试使用一些嵌套属性来开发用户控件 这些属性允许使用数据绑定来设置它 例如 我有这样的事情 Top level control public class MyControl Control public string TopLevel
  • Cocoa Touch 中的代表与事件

    我正在编写我的第一个 iPhone 应用程序 并且一直在探索 Cocoa Touch 和 Objective C 中的设计模式 我有客户端 Web 开发背景 因此我正在努力了解代表 具体来说 我不明白为什么需要委托对象而不是事件处理程序 例
  • 将项目重新排列到数组中,彼此之间没有相似的项目

    假设我有一个块的集合 12 个是红色 8 个是蓝色 5 个是黄色 1 个是绿色 我需要创建一个算法 将这些对象输出到单个数组中 没有红色块彼此相邻 没有蓝色块彼此相邻 等等 输出应如下所示 红 蓝 红 蓝 红 蓝 黄 蓝 绿 红 黄等 到目
  • 使用模板化构造函数的非模板化类的实例解释为函数定义?

    以下代码最好地说明了我的问题 include