运算符()的部分特化

2024-02-22

我的一个类声明了一个模板化函数:

template<class A, class B>
A do_something(const std::vector<B> &data)

我想部分专注于typename A. B是一个实现了非常小的接口的类型系列,并且我们使用了很多它们,所以我希望我的专业化是通用的B。我怀疑这是双重令人烦恼的typename A仅用作返回类型。

从互联网上,我发现我不能部分专门化一个函数,所以我创建了一个类,如下所示:

template<class A, class B> 
class do_something_implementation {
  public:
    do_something_implementation(const std::vector<B> &data_) {
      data = data_;
    }

  int do_something_implementation<int, B>::operator()() {
    /* Complicated algorithm goes here... */
  }

  double do_something_implementation<double, B>::operator()() {
    /* Different complicated algorithm goes here... */
  }

  private:
      std::vector<B> data;
}

当我尝试编译它(使用 Visual Studio 2008)时,编译器崩溃(!)并且出现以下错误:

fatal error C1001: An internal error has occurred in the compiler.

我认为这是我的问题而不是编译器的问题。有没有更好的方法来表达我所追求的部分专业化?


通常,它是这样的:

template <typename A, typename B>
struct DoSomethingHelper
{
    static A doIt(const std::vector<B> &data);
};

template <typename B>
struct DoSomethingHelper<double, B>
{
    static double doIt(const std::vector<B> &data) { ... }
};

template <typename B>
struct DoSomethingHelper<int, B>
{
    static int doIt(const std::vector<B> &data) { ... }
};

template<class A, class B>
A do_something(const std::vector<B> &data)
{ return DoSomethingHelper<A, B>::doIt(data); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运算符()的部分特化 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 为什么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
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 为什么应该重用 XmlHttpRequest 对象?

    据我了解 尽可能重用 XmlHttpRequest 对象是最佳实践 不幸的是 我很难理解为什么 看来 通过尝试重用 XHR 对象 您会增加代码复杂性 并引入可能的浏览器不兼容 http keelypavan blogspot com 200
  • WPF 列表框 SelectionChanged 事件

    我的列表框有问题 当我在程序中单击一个 ListBoxItem 时 我想更改 打开窗口并在之前对其进行预排序 但问题是它首先触发事件 然后更改选择 代码 private void LB Playlist SelectionChanged o
  • 在 HTML5 视频中突出显示播放器搜索栏

    我的 HTML5 视频播放器有一个定制的搜索栏 但我需要突出显示搜索栏的一些预定义部分 例如秒2 5 and 7 8 我怎样才能做到这一点 基本上 我需要它是这样的 到目前为止 这是我的简单代码
  • lumen:全新安装时找不到 App\Http\Controllers\Controller 类

    我正在与一个全新安装Lumen 构建 Web API 的大部分内容都可以工作 但是当我尝试使用路由器指向一个类时 我收到此错误 Fatal error Class App Http Controllers Controller not fo
  • 仅当属性发生更改时才更新用户的属性

    我的项目最初的 运行良好的版本如下所示 1 用户填写表单 新操作 并点击提交 创建操作 2 用户被重定向到他们的编辑页面 编辑操作使用模型创建的edit id 而不是Rails自动生成id 这显示用户已经提交的信息 3 用户可以选择更改信息
  • 获取为 ON DUPLICATE KEY UPDATE 多次插入插入的行数?

    我有一个非常大的表 主键为BINARY 20 该表大约有 1700 万行 每小时 一个 cron 作业会尝试使用以下命令将多达 50 000 个新条目插入到该表中 ON DUPLICATE KEY UPDATE syntax cronjob
  • 删除 Google Cloud 项目中的所有资源

    我的一个项目包含许多资源 这些资源是从不同来源创建的 意味着一些来自 Deployment Manager API 一些来自用户的控制台 我需要删除所有资源无需删除 关闭 项目在这种情况下 是否有任何 API 端点可以删除该项目中的所有资源
  • Firebase云功能:无法从文件中读取凭据

    由于新的 Firebase Cloud Functions 版本 gt 1 0 我只需要打电话 admin initializeApp 没有任何参数 但是 当我这样做然后运行 firebase deploy only functions 时
  • 通过索引检索 DataView 中的行

    我有一个 DataView 它已按某种顺序排序 如何使用索引检索值 像这样的事情 if dv rows 0 name xxx do something else something else 你试过了吗 DataRowView rowVie
  • 减去随机数[重复]

    这个问题在这里已经有答案了 我正在制作一个游戏 用户必须解决一个简单的减法 但结果必须是正整数 我设法做了所有事情 但由于某种原因 答案有时是否定的 我不知道如何解决它 import java util Random import java
  • 垂直滚动条绝对位置

    有没有办法让跨浏览器垂直滚动条具有绝对位置 我的问题是 滚动条在出现时会改变我网站的宽度 从而在布局中给出一些问题 我不想删除它 我只是想让它的宽度不干扰我的布局 Thanks 仅在 Safari 和 Chrome 即 Webkit 中 您
  • 如何验证JWT签名?

    我想使用 Go AppEngine 后端对 Android 用户进行身份验证 我可以通过以下方式轻松在 Android 中获取 ID 令牌http android developers blogspot co il 2013 01 veri
  • 减少大型 JavaScript 操作对客户端的明显延迟的方法

    作为 Chrome 扩展的一部分 我对文档结束事件中的许多 最多 3000 个 元素执行一些正则表达式替换 在最坏的情况下 在相当不错的 PC 上的 Chrome 34 0 1847 116 m 中 该操作可能需要 gt 180 秒才能完成
  • java中如何在多个类中使用一个接口?

    我有 1 个 Activity 和 2 个 Fragment 我想要在活动发生火灾时listener receivePreview obj then 执行 OneFragment gt receivePreview 执行 TwoFragme
  • NodeJS HTTP 请求 POST ERROR 套接字挂起

    您好 我在给定大量 json 对象数组的 NodeJS 上执行 HTTP 请求时遇到问题 给定小数组 json 对象 该请求工作正常 但是 如果我尝试增加 json 数组的大小 我收到错误 套接字挂起 error code ECONNRES
  • 当鼠标悬停在嵌入的 iframe 上时防止父页面滚动

    无需限制 iframe 内的滚动或需要专门命名可滚动元素 我有一个类似谷歌地图的小部件 可以以 iframe 嵌入代码的形式嵌入到第三方网站中 当人们在我的小部件上使用鼠标滚轮时 我只想滚动小部件的内容而不是父页面 我的问题类似于如何在滚动
  • 如何向 Watson 对话响应添加操作?

    我已经毫无问题地创建了意图 实体和对话 但现在我正在尝试做到这一点 以便当用户发送 再见 时 应用程序将关闭 根据该文档 我必须命名一个与意图相关的操作 我怎么做 是通过代码还是通过对话工作区平台 您可以使用context variable
  • 员工 ID 自动生成,带前缀

    我很困惑我希望员工 ID 是自动生成的前缀格式 我知道这可能是在 sql server 中触发之前发生的 我正在关注帖子http www aspdotnet suresh com 2012 04 set custom auto genera
  • Environment.getExternalStorageDirectory() 在 API 级别 29 java 中已弃用

    在 android Java 上工作 最近将 SDK 更新到 API 级别 29 现在显示一条警告 指出 Environment getExternalStorageDirectory 在 API 级别 29 中已弃用 我的代码是 priv
  • 运算符()的部分特化

    我的一个类声明了一个模板化函数 template