如何使用友元函数在模板类之外重载运算符==?

2023-12-02

我正在尝试编写一个重载的模板类运算符==。我知道如何在课堂上得到它:

    template <typename T>
    class Point
    {
    private:
        T x;
    public:
        Point(T X) : x(X) {}

        bool operator== (Point &cP)
        {
            return (cP.x == x);
        }
    };

但现在我想在模板类之外实现这一点。我读过这篇文章:尝试重载 并在我的代码中添加模板声明:

template <typename> class Point;
template <typename T> bool operator== (Point<T>, Point<T>);
template <class T>
class Point
{
private:
    T x;
public:
    Point(T X) : x(X) {}

    friend bool operator== (Point cP1, Point cP2);
};

template <class T>
bool operator== (Point<T> cP1, Point<T> cP2)
{
    return (cP1.x == cP2.x)
}

但是我仍然收到错误:unresolved external symbol "bool __cdecl operator==(class Point<int>,class Point<int>)" (??8@YA_NV?$Point@H@@0@Z) referenced in function _main

当我拿走时friend from :

friend bool operator== (Point cP1, Point cP2);

并希望它是成员函数,则会出现另一个错误:

too many parameters for this function

why?


@Kühl的答案是声明模板化类的模板化友元函数的最宽松的方法。然而,这种方法有一个不明显的副作用:所有模板实例化Point是所有模板实例的朋友operator==()。另一种方法是仅使用相同类型的实例化Point一个朋友。这是通过添加一个来完成的<T>在朋友宣言中operator==().

template <typename T> class Point;

template <typename S>
bool operator== (Point<S>, Point<S>);

template <typename T>
class Point {
    // ...
    friend bool operator==<T> (Point, Point);
};

参考
http://web.mst.edu/~nmjxv3/articles/templates.html

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

如何使用友元函数在模板类之外重载运算符==? 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • Keras - 绘制训练、验证和测试集准确性

    我想绘制这个简单神经网络的输出 model compile loss binary crossentropy optimizer adam metrics accuracy history model fit x test y test n
  • 使用node-csv和meteor-file将CSV导入到集合中

    现在已经挣扎了几个小时 尝试导入从客户端上传的 CSV流星文件并使用转换为 CSVnode csv服务器端 我基本上需要用用户上传的 CSV 文件中的数据填充我的集合 server filehandler js Meteor methods
  • 如何克隆包含装箱特征对象的 HashMap?

    I have HashMap使用自定义哈希器 这个的项目HashMap没有实现特征Clone 这是一个特征 但是有一个克隆项目的功能 如下所示 use std collections HashMap use std hash BuildHa
  • 使用 std::unique_ptr/std::shared_ptr 确认线程安全

    我的应用程序有一个 IRC 模块 本质上是一个普通的客户端 由于这是高度线程化的 因此我面临插件检索的风险 例如 用户昵称 它当时有效 但解析器触发更新 更改所述昵称 一旦另一个线程再次执行 它就会处理指向现在无效内存的指针 因为不可能将
  • 如何将 SPListitem 从一个 SPList 复制到另一个 SPList

    我需要将项目从一个 SPList 复制到另一个 这是不起作用的代码 public void CopyList SPList src Copy items from source List to Destination List foreac
  • 使用 Google 地图 API 进行标记的路线

    因此 我正在使用 Google Maps API 目前我有一个自定义标记来突出显示该位置 如果可能的话 我想做的是能够单击它并让它弹出谷歌地图方向对话框 例如THIS 通常在谷歌地图上点击地名时会得到 目前 我刚刚将其设置为放大标记 但显然
  • 从 Windows 服务更新 ASP.Net 成员资格

    我正在为一家物业管理公司做一个项目 有存储所有租户和物业组合的后端系统 以及允许用户查看其套餐 服务请求等的前端网站 我需要编写一个 Windows 服务 从后端提取他们的信息并将其放入会员数据库中 我不知道如何配置服务以连接到会员提供商
  • Qt 嵌入应用程序内的屏幕旋转

    在我们的目标设备中 我们使用 qws 参数运行 QtE 应用程序 要旋转屏幕 我们指定 display Transformed rot90 作为应用程序参数 效果很好 但是 我们有一个在应用程序内旋转屏幕的功能 因此我们尝试 QScreen
  • 文字函数的隐式参数

    边读边玩 框架文档 我遇到了这个片段 def index Action implicit request gt session get connected map user gt Ok Hello user getOrElse Unauth
  • 如何以编程方式重新配置 uima ruta 分析引擎(更改参数值)?

    这是问题的延续 如何从 Maven 项目运行外部 ruta 脚本而不将脚本或其类型系统放在类路径中 请指导我以编程方式重新配置分析引擎 通过更改参数值 情况 您有一个 UIMA Ruta 分析引擎的正确 xml 描述符 并且您想要重新配置
  • 如何重置 VSTS 计数器?

    我们需要重置 VSTS 计数器 我没有看到任何方法可以通过用户界面来做到这一点 有一种方法可以直接调用重置构建计数器REST API 但为了做到这一点 您需要知道计数器 id 您应该能够通过调用找到它得到一个定义休息 API 不幸的是 无论
  • 波浪号的意义

    string path context Server MapPath Temp or string path context Server MapPath Temp 一样吗 我知道 代表根 但想知道两者之间的区别 folder and fo
  • 将 y 轴转换为百分比 ggplot

    我使用堆积条形图 带有 coord flip 来尝试比较对照组和治疗组在测试前和测试后的分布 这是我正在使用的几种技术之一 这是情节 这是代码 抱歉 没有数据集就无法重现 如果这是一个问题 我将制作一个可重现的数据集 因为我无法共享真实数据
  • 如何在关联类型中指定生命周期参数?

    我有这个特点和简单的结构 use std path Path PathBuf trait Foo type Item AsRef
  • WWDC 2019 - iOS13 2020 年 4 月要求

    In the WWDC 2019 视频让您的 iOS 13 UI 现代化 苹果提到了一个要求 即到 2020 年 4 月 所有应用程序都应 采用启动故事板 支持任意尺寸 支持分屏多任务 支持分屏多任务 的含义是否如中所述课程 258 为多个
  • 如何根据结果分组将pandas中的数据框划分为多个数据框?

    Date A Date B Date C Amount 0 09 01 2016 09 01 2016 01 01 1800 2405814 36 1 09 01 2016 09 01 2016 09 01 2016 11347445 71
  • 序列化 XmlDocument 并通过 HTTPWebRequest 发送

    我试图弄清楚如何正确序列化我的 XmlDocument 并通过 HTTPWebRequest 对象发送它 这是我到目前为止所拥有的 Stream requestStream HttpWebRequest request HttpWebReq
  • 通过指针枚举 NSString 字符

    如何通过从中提取每个 unichar 来枚举 NSString 我可以使用characterAtIndex 但这比通过递增unichar 慢 我在苹果的文档中没有看到任何不需要将字符串复制到第二个缓冲区的内容 像这样的东西将是理想的 for
  • 在java中监视目录和子目录的创建、修改和更改

    我已经编写了一些代码来检测目录 C java newfolder 中的更改 它运行良好 我已经在下面给出了 import java nio file import java util List public class DirectoryW
  • 如何使用友元函数在模板类之外重载运算符==?

    我正在尝试编写一个重载的模板类运算符 我知道如何在课堂上得到它 template