函数模板专业化的别名

2023-12-07

int f1(int a, int b) { return a+b; }
int f2(int a, int b) { return a*b; }

template <typename F> void foo(int i, int j)
{
 // do some processing before
 F(i,j);  
 // do some processing after 
}

我想为 foo 的专门化创建一个别名,如下所示:

constexpr auto foo1 = &foo<f1>;
constexpr auto foo2 = &foo<f2>;

并像这样调用该函数:foo1(1,2);foo2(1,2);有什么方法可以在 C++ 中实现这一点吗?谢谢!


Edit:foo() 不是 f1 的包装,它是调用 f1 或 f2 的函数。我需要在通话之前和之后做一些额外的事情。 F 是一个函子,我想要一条通往 foo 专业化的“捷径”。上面的代码是一种伪代码。


评论中有一些很好的方法:std::bind、使用 lambda、传递实例F到函数中,所以我将提供一个替代方案。

如果您要传递的函数类型foo一直会int(int, int),然后将模板参数设置为非类型模板参数,然后使用您的函数之一实例化它:

int f1(int a, int b) { std::cout<<"f1\n"; return a+b; }
int f2(int a, int b) { std::cout<<"f2\n"; return a*b; }

template <int(*F)(int, int)> 
void foo(int i, int j)
{
    F(i,j);   
}

然后这样称呼它:

int main()
{
    constexpr auto foo1 = foo<f1>;
    constexpr auto foo2 = foo<f2>;
    foo1(1,2);
    foo2(1,2);
}

Output:

f1
f2

我们在这里做的技巧是让模板参数成为对函数的引用,这是很hacky但合法的AFAIK。

Demo

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

函数模板专业化的别名 的相关文章

  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触

随机推荐

  • 如何捕获全局异常?

    有没有办法捕捉global代码中的 崩溃 应用程序异常 例如 objc exception throw EXC ARITHMETIC 等 我需要它 因为我想在应用程序被系统杀死之前做一些事情 您可以使用以下方法为任何未捕获的异常设置处理程序
  • MySQL查询从一个表中获取最佳排名并用另一个表更新结果

    我有一个排名板 列出了每种性别 男性和女性 的前 100 个最佳博客 我有一个博客表 PRIMARY blogs id users id blogs score blogs score time gender 1 11 2852 2015
  • 如何使用天蓝色连接字符串覆盖本地连接字符串

    我在 Net core 项目中使用 appsettings json 作为连接字符串 我的连接字符串是 ConnectionStrings OT DB Connection Data Source 108 Initial Catalog O
  • 运行 Composer Laravel 8 时出现 Symfony 进程错误

    突然在我的 Laravel 8 项目中 我运行了 Composer 来卸载一个依赖项 我想重新安装该依赖项 只是为了顺序并从头开始 我开始抛出这个与 Symfony Process 有关的错误 PHP 致命错误 未捕获的类型错误 fclos
  • 如何将每个 DStream 保存/插入到永久表中

    我一直面临着 Spark Streaming 的问题 关于将输出 Dstream 插入到永恒的SQL 表 我想将每个输出 DStream 来自 Spark 处理的单个批次 插入到一个唯一的表中 我一直在使用 Python 和 Spark 版
  • 在Java中禁用键盘/鼠标

    我正在开发一个程序 它允许用户锁定计算机 这样其他人就不能使用它 无论如何 我可以禁用鼠标和键盘上的特定键吗 谢谢 不 但是您可以创建让程序锁定屏幕 然后使用 MouseMovementListener 以便每次鼠标移动时 您都以编程方式将
  • 使用 Javascript 选定单词的索引

    如何使用 Javascript 获取 HTML 中选定文本的索引 例如 在一个 HTML 文件中 有如下段落 我住在印度 印度是一个非常美丽的国家 现在如果用户选择India在第一句话中应该有一个alert 5如果用户选择India第二行然
  • C# lambda 编译成什么?堆栈框架,匿名类型的实例,还是?

    C lambda 编译成什么 堆栈框架 匿名类型的实例 还是 我读过这个question 这主要回答了 为什么 在使用隐式类型功能时不能使用 lambda 但是 这个问题旨在回答编译器生成什么构造来实际执行 lambda 代码 它是匿名类型
  • 使用 Telnet 从 Gmail 发送电子邮件

    我正在 Windows 上工作 并且启用了 telnet 客户端 在cmd提示符下 telnet smtp gmail com 587 220 mx google com ESMTP dk3sm50678627pbc 32 gsmtp He
  • gulp:如何在不刷新的情况下更新浏览器(仅适用于 css 更改)

    我已经设置了 gulp 以便在进行更改时浏览器会重新加载 但是 对于 css 更改 我希望浏览器无需刷新即可更新 但我不知道如何执行此操作 对于我当前的设置 我使用了this教程 var debug require gulp debug c
  • 使用正则表达式拆分列中的值

    我的 data frame 有两列 如下所示 dat ID Details id 1 box1 homodomain gn box1 os homo sapiens p 4 se 1 id 2 sox2 plurinet gn plu os
  • 如何在 unicode 中管理混合 LTR 和 RTL 语言?

    有时我们必须在显示屏上显示混合了 RTL 和 LTR 语言的消息 该消息采用 unicode 格式 那么 unicode 如何处理混合呢 对平台有依赖吗 该过程由此处描述的 Unicode 双向算法描述 http www unicode o
  • 如何使用 md5 代替 bcrypt?

    我需要使用md5 代替bcrypt 用于存储密码 但是当我这样做时 protected function create array data return Account create username gt data username e
  • 这段代码中DATA SEGMENT下的代码什么时候执行?

    我是汇编编程的初学者 我在谷歌上浏览了很多 信息很多 但是我还是看不懂下面的代码 如果有人能解释 我将不胜感激 MOV AX 数据 我也不明白数据段中存在的代码何时会在此程序中执行 ASSUME CS CODE DS DATA CODE S
  • 将参数传递到 JButton ActionListener

    我正在寻找一种将变量或字符串或任何内容传递到 JButton 的匿名 actionlistener 或显式 actionlistener 中的方法 这是我所拥有的 public class Tool public static void a
  • Require.js 与 Phonegap 和 iOS 推送通知

    我正在使用 Phonegap Backbone js 和 Require js 构建一个应用程序 该应用程序实现了 Phonegap 推送通知 目前 index html 中脚本的加载如下所示
  • jQuery keyup() 非法字符

    我有一个字段 希望在用户键入时显示一些非法字符 在下面的示例中我该如何做到这一点 input bind change keyup function var val this attr value if val contains this c
  • 我们如何检测影子根是使用 v0 还是 v1 API 创建的?

    假设一个 JS 模块导出shadowRoot这是用以下任一方法创建的el createShadowRoot or el attachShadow 我们不知道是哪个 我们如何检测根是 v0 影子根还是 v1 影子根 即我们如何检测使用哪种方法
  • 如何将n列连接成一列?

    我的目标是如果我有这个 colmuns c1 c2 c3 c4 c5 n row1 a a a a a row2 b b b b b rowN 我想做一个会返回的查询 myCol aaaaa bbbbb nnnnn 我知道我能做到 sele
  • 函数模板专业化的别名

    int f1 int a int b return a b int f2 int a int b return a b template