通过参数推导多参数模板中的第一个模板参数

2024-02-22

首先是我的问题,然后解释我正在尝试做什么,因为我可能会错误地处理问题。

是否可以在指定其他参数的同时从参数中推导出多参数模板中的第一个模板参数。

例子:

 template<class A, class B>
 B function(A object)
 { 
     return B(A);
 }

称为:

 function<BType>(AInstance);

我找不到一种方法来完成这项工作。

编辑:另一个例子可能更适合我下面的问题,正如我收到的第一条评论所表明的那样

例子:

 template<class A, A::B foo>
 void function(A object)
 { 
     object.doSomethingWithTypeA::B(foo);
 }

称为:

 function<A::BInstance>(AInstance);

不同之处在于,第二个模板参数依赖于第一个模板参数的特定类型,因此我无法切换模板参数。

现在描述我正在尝试做的事情:

我目前正在尝试创建一个模板通用仿函数类,它可以采用自由函数或成员函数并将其包装到仿函数中。

我成功地实现了我的目标,但现在我想让一切变得更加用户友好。目前创建函子的模板化函数如下所示:

template <class T, ReturnType (T::*Method)(FunctionArguments...)>
static constexpr UniversalFunctor Create(T* object) {
   return {object, MethodWrapper<T, Method>};
}

现在要为用户必须调用的成员函数创建函子

UniversalFunctor<ReturnType>::Create<ClassName, ClassFunction>(Object)

这是相当麻烦的。

由于 Object 必须是 ClassName 类型或者至少可以推导出来,我预计会出现这样的调用:

UniversalFunctor<ReturnType>::Create<ClassFunction>(Object)

也应该能够成功,因为 ClassName 参数可以从传递的指针中推导出来。然而,这似乎不可能,因为 ClassFunction 始终被视为第一个模板参数。


不可以,您只能按声明顺序指定模板参数。因此,您可以指定第一个并推导第二个,但反之则不然。

您可以为模板编写一个包装器:

template<class B, class A>
B function_wrapped(A&& object)
{ 
    return function<A, B>(std::forward<A>(object));
}

现在您可以致电:

function_wrapped<BType>(AInstance);

当然,如果只改变原函数中参数的顺序会更简单。

第二个例子的问题比较多。

如果你可以逆转类型的依赖关系。通过要求B定义一个别名A,那么你可以定义:

template<class B, B foo>
void function(typename B::A object)

And call

function<decltype(BInstance), BInstance>(AInstance);

这不是很漂亮。

最简单的解决方案是使用运行时非类型参数,以便可以推导所有类型。

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

通过参数推导多参数模板中的第一个模板参数 的相关文章

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

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 适合初学者的良好调试器教程[关闭]

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

    我需要从 Redis 控制台获取 客户端列表 输出以在我的 C 应用程序中使用 有没有办法使用 ConnectionMultiplexer 执行该命令 或者是否有内置方法可以查找该信息 CLIENT LIST是 服务器 命令 而不是 数据库
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

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

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

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

随机推荐

  • 节点高速通道-会话管理

    我为 ArangoDB for ConnectJS 编写了一个会话存储驱动程序 它正在工作 尽管仍处于 alpha 阶段 但我有几个问题 过期属性为 false 的第一个会话仅在用户代理的持续时间内保留 我注意到浏览器窗口关闭时不会调用 s
  • 以编程方式获取 SQL 集群虚拟名称

    我编写了一个 Windows 服务来从我们所有的 SQL 服务器收集信息 该服务安装在每台服务器上 并利用 WMI 和 SMO 将相关系统信息插入回中央数据库 为了获取 SQL 信息 我使用以下 C 代码 List
  • 使用 EC2(Amazon Web Services)自动 Ejabberd 集群[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Using Ejabberd http www process one net en ejabberd in EC2 http aws amazon
  • 在 Android 上检测 4K UHD 屏幕

    我正在尝试检测设备何时能够以 4K UHD 3840x2160 分辨率输出 nVidia Shield TV 和 Sony Xperia Z5 Premium 等许多设备即使支持 UHD 也会报告以 1080p 运行 因为它们默认为非视频布
  • Windows 7 左键单击时钟弹出窗口

    当在 Windows 7 也可能是 Vista 上单击任务栏中的时钟时 会打开一个弹出窗口 显示日历和时钟 因此不是日期和时间调整窗口 我如何自己打开这个窗口 在 C 中首选 我希望timedate cpl会调用它 但这会打开日期和时间调整
  • 如何在 Tkinter 中获得带有滚动条的框架?

    我想要一个Frame 用户可以根据应用程序的需要添加任意数量的文本字段 该应用程序以一个文本字段和该文本字段下方的一个按钮开始 当用户按下按钮时 新的文本条目将添加到第一个文本条目下方 这可能会重复无数次 在窗口的中间 会有一个Text小部
  • docker 中的特权模式以集群形式组成

    我在用docker compose yml在具有树莓派集群的 docker swarm 中部署服务 我的服务需要访问树莓派 GPIO 并且需要特权模式 我使用 docker 版本 18 02 和 docker compose 版本 3 6
  • 返回流而不是列表[重复]

    这个问题在这里已经有答案了 在 Java 8 中我越来越多地替换Collection返回值与Stream 所以我曾经拥有过 public List
  • 我可以使用 Google Chrome 扩展程序阻止alert()吗

    我可以创建一个 Google Chrome 扩展来阻止该页面执行alert 正如 MrGlass 所说 目前 Chrome 扩展程序在单独的环境中运行 限制了对实际应用程序的访问 window对象并提供仅对扩展有效的副本 为了解决这个问题
  • Django - 区分不同类型的 IntegrityError

    我正在使用 django MySQL 有时 我将重复的数据插入数据库 这会导致 django 引发错误IntegrityErrror 问题是 django python 对几个不同的版本使用相同的错误MySQL 错误 http dev my
  • write_some 与 write - boost asio

    为什么有人想使用write some什么时候它可能无法将所有数据传输给对等方 从升压write some文档 write some 操作可能不会将所有数据传输到对等方 如果需要确保所有数据都被写入 请考虑使用 write 函数 在阻塞操作完
  • is_numeric、intval、ctype__digit..您可以信赖它们吗?

    is numeric intval ctype digit 您可以信赖它们吗 或者我必须使用正则表达式 function isNum str return preg match 0 9 str 你们有什么感想 我是傻子吗 之间的一个重要区别
  • 如何使用 OpenSSL 提取公钥?

    以下命令生成一个包含公钥和私钥的文件 openssl genrsa des3 out privkey pem 2048 Source here http www openssl org docs HOWTO keys txt 使用OpenS
  • make:安装:找不到命令

    当我尝试安装时git从它的源头开始qnx 我收到以下错误 请注意 pound 是 sudo 的提示qnx configure without iconv with perl usr pkg bin perl with python usr
  • 在哪里可以找到使用 boto3 编写自定义 AWS 凭证提供程序的文档?

    我希望创建一个 python 进程来在运行时刷新临时 AWS 凭证 有效期为 30 分钟 以确保我的代码可以连续运行超过 30 分钟 什么是 RefreshableCredentials 以及如何使用它 经过大量研究后 我终于得出结论 bo
  • 使用jest 模拟react-router-dom 钩子不起作用

    我正在使用 Enzyme 的浅层方法来测试使用useParams钩子从 URL 参数中获取 ID 我试图嘲笑useParams挂钩 这样它就不会调用实际的方法 但它不起作用 我还在得到TypeError Cannot read proper
  • 从 Windows 进行 Linux 开发的最佳设置? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从 Windows 工作站开发 Linux 应用程序的最佳设置是什么 现在 我通过 SSH 连接到我们的 Linux 开发服务器 并使用 Ecl
  • 结构图 - 构造函数中依赖项的集合

    我的注册表中有以下代码 Scan x gt x Assembly Assembly GetExecutingAssembly x AddAllTypesOf
  • 如何使用构建中注入的密码作为 Active Choices 参数中的环境变量

    我在标题为 将密码作为环境变量注入到构建中 的构建配置部分中定义了密码 我想在我的 Active Choices 中使用 MYVAR 未加密值 不幸的是 它不起作用 对 MYVAR 的引用失败 在下面的示例中 为了测试 我只是尝试显示 MY
  • 通过参数推导多参数模板中的第一个模板参数

    首先是我的问题 然后解释我正在尝试做什么 因为我可能会错误地处理问题 是否可以在指定其他参数的同时从参数中推导出多参数模板中的第一个模板参数 例子 template