不能重载函数

2024-02-16

所以我有一个模板化类,当我有特定类型(例如 char)时,我想重载函数的行为。对于所有其他类型,让他们做自己的事情。但是,C++ 不允许我重载该函数。

为什么我不能重载这个函数?我真的真的不想要进行模板专业化,因为这样我就复制了整个类。

这是一个演示该问题的玩具示例:http://codepad.org/eTgLG932 http://codepad.org/eTgLG932

此处发布相同的代码以供您阅读:

#include <iostream>
#include <cstdlib>
#include <string>

struct Bar
{
  std::string blah() { return "blah"; }
};

template <typename T>
struct Foo
{
public:
  std::string doX()
  {
    return m_getY(my_t);
  }

private:
  std::string m_getY(char* p_msg)
  {
    return std::string(p_msg);
  }

  std::string m_getY(T* p_msg)
  {
    return p_msg->blah();
  }

  T my_t;
};

int main(int, char**)
{
  Foo<char> x;
  Foo<Bar> y;
  std::cout << "x " << x.doX() << std::endl;
  return EXIT_SUCCESS;
}

谢谢大家的建议。已经提出了两种有效的解决方案。我可以专门化 doX 方法,也可以专门化 m_ge​​tY() 方法。

归根结底,我更愿意将我的专业保密而不是公开,所以我接受 Krill 的回答。


您可以仅将整个模板类中的一个函数专门化为特定类型,而无需专门化整个类。它看起来像这样:

template <> void Foo<char>::doX() {
     /* custom implementation here */
}

在实践中你很少看到这种情况,但这是完全合法的 C++ 代码。

希望这可以帮助!

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

不能重载函数 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • 如何在 dojo 数据网格中显示复选框?

    如何在 dojo 数据网格中显示复选框 我建议将 cellType 设置为 dojox grid cells Bool 而不是格式化程序 格式化程序为您提供了很大的自由 但也有责任从所有复选框 针对所有行 收集数据 像这样的结构条目应该可以
  • Typescript:类型“never”上不存在属性“length”

    我有一组基本功能 export function isObject value any value is Object return value null typeof value object isArray value export f
  • Python Pandas 根据条件求平均值到新列中

    我有一个包含以下数据的 pandas 数据框 matchID server court speed 1 1 A 100 1 2 D 200 1 3 D 300 1 4 A 100 1 1 A 120 1 2 A 250 1 3 D 110
  • 每秒 Vuex 提交相同操作的速度都很慢

    我正在使用 Vuex V3 0 1 和 Vue js v 2 5 17 vuex 中的相同操作提交每秒都会很慢 如果我将相同的 axios 请求放入组件内并从组件内调用它 则时间始终在 16 到 22 毫秒之间 然而 当我发送到商店时 每个
  • 美国联邦税号 (EIN) 的正则表达式

    在输入标记的模式属性中 我使用以下正则表达式来验证美国联邦税 ID 字段 pattern 07 1 7 1 0 6 2 0 7 35 0 9 468 0 8 9 0 589 d 7 但此正则表达式允许 11 1111111 22 22222
  • Microsoft Owin Facebook 身份验证在 MVC 应用程序中不起作用

    我正在 Asp Net MVC 应用程序中工作 我正在使用默认的 Visual Studio 项目模板 Google 身份验证工作正常 但 facebook 不行 我指定了在我的 Facebook 开发者门户上生成的有效 appId 和 a
  • NEON 向量化无符号字节的乘积之和: (a[i]-int1) * (b[i]-int2)

    我需要改进循环 因为我的应用程序调用了数千次 我想我需要用 Neon 来做这件事 但我不知道从哪里开始 假设 先决条件 w始终为 320 16 32 的倍数 pa and pb16 字节对齐 ma and mb是积极的 int whileI
  • QtCreator语义问题警告代码永远不会被执行

    我有以下大块Qt code if this gt ueCommunicationsSocket gt bind QHostAddress data 0 toString static cast
  • Xcode 4.2。运行时卡住“正在附加到我的应用程序”

    在 xcode 4 2 中 有时当您要在模拟器上运行 ios proj 时 状态窗口会显示 正在附加到 myapp 并且会卡在那里 直到您取消 现在 之前已经有人问过这个问题 XCode 4 在 附加到 应用程序名称 处挂起 https s
  • “实时”更新 Qt TextView

    我有一个带有嵌入式脚本 jit 的 Qt 应用程序 现在我想接收 QTextEdit 上脚本的输出 更具体的是 QPlainTextEdit 为此目的 正在发出回调 我面临的问题是 无论我尝试什么 文本编辑的输出要么延迟到脚本完成 要么在
  • 搜索和替换--.sub(replacement, string[ count=0]) - 不适用于特殊字符

    我正在学习 Python 和 Regex 并做了一些简单的练习 这里我有一个字符串 我想用 html 代码替换特殊字符 代码如下 str nAxes hist tPlot a histogram nAxes hist2d tMake a 2
  • 对列表进行排序

    使用 C 对列表进行数字排序的最佳方法是什么 我的列表有项目 5 7 3 我希望它们按 3 5 7 排序 我知道一些更长的方法 但我想 linq 有更快的方法吗 抱歉 今天已经结束了 我的心思在其他地方 第一次没有看到它改变 这里不需要LI
  • 使用 Flask-Admin 自定义列表视图

    我有一个简单的模型调用 我正在使用 Flask Admin 来创建 编辑 删除该模型的实例 Call 的字段之一是音频文件的路径 我希望能够通过添加一些 html 代码来在管理中播放该文件 我检查了模板flask admin templat
  • “git add *”和“git add -f *”之间的区别?

    当我使用git add 它会跳过一些文件和文件夹 但同样的命令git add 对于其他一些项目来说效果很好 但是当我使用时git add f 工作正常 好的 这是来自 Git 参考手册 refhttps git scm com docs g
  • 关于字符串操作的基本 Python 问题:示例:string.lowercase

    所以我尝试运行它 但它出错了 我需要帮助了解问题所在 我真的很感谢任何帮助 我正在学习麻省理工学院的开放课程编程简介 words GreatTimes words lowercase 我收到此错误 AttributeError str ob
  • 从 matplotlib 图检索 XY 数据 [重复]

    这个问题在这里已经有答案了 我正在用 wxPython 编写一个小应用程序 它有一个 matplotlib 图 使用 wxagg 后端 面板 我想添加用户将图中当前绘制的 X Y 数据导出到文本文件的功能 有没有一种非侵入性的方法来做到这一
  • 包括 xs:restriction(s) 作为 moxy 生成的 java 类中的注释

    我有一些新的xsd schema我需要为其生成相应的java类的版本更新 在过去 我知道类总是使用 EclipseLink 的 Moxy JAXB 实现生成 并且我可以看到模式是否包含
  • 使用 HHVM (HipHop) 运行 phpunit 测试

    我正在尝试通过 HHVM 在虚拟 Ubuntu 12 04 64 位服务器 安装上运行 PHPUnit 单元测试 测试通常使用位于我的测试目录中的 phpunit xml 文件运行 其中包括一个用于处理自动加载的引导文件 并且测试在普通的
  • 在谷歌脚本中添加带有复选框的行

    我正在为 Excel 工作表编写一个小型 Google 脚本 该脚本在 POST 请求上附加一行 根据 POST 参数 我要么将该行附加到末尾 要么将其插入行之间 其中一列实际上是一个布尔值 我试图将其表示为复选框 问题是当我尝试追加一行时
  • 不能重载函数

    所以我有一个模板化类 当我有特定类型 例如 char 时 我想重载函数的行为 对于所有其他类型 让他们做自己的事情 但是 C 不允许我重载该函数 为什么我不能重载这个函数 我真的真的不想要进行模板专业化 因为这样我就复制了整个类 这是一个演