首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >推导出用于通用引用和成员指针的冲突类型

推导出用于通用引用和成员指针的冲突类型
EN

Stack Overflow用户
提问于 2018-02-21 06:07:29
回答 2查看 314关注 0票数 2

我想要这样的功能:

代码语言:javascript
运行
AI代码解释
复制
template<typename C, typename T>
void foo(C &&aclass, T (C::*const memberFunc)(unsigned)) {

}

参数是(因为C/C++类型语法是心智的):

  • 对类的通用引用,如MyClass
  • 指向MyClass的成员函数的const指针,该函数接受无符号int并返回T

但是,如果我使用l-值引用作为第一个参数调用它,则会得到如下错误:

候选模板被忽略:推导出参数'C‘('MyClass &’)的冲突类型。“MyClass”)

据我所知,它是从第一个和第二个参数中推导出C的,但是得到了不同的推论,并且变得混乱。

根据这个答案,您可以使它只对第一个参数进行推断,并在第二个参数上以某种方式使用typename关键字。但是,当我想让它推断参数(T)中的一种类型,而不是另一种类型(C)时,我无法找到这样的语法。

这个答案也很有帮助,但是他们解决这个问题的方法是完全不对C使用引用,在这种情况下,引用是同样有效的,但在我的情况下却不是。

这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-21 06:11:23

使用lvalue,C将被推导为第一个参数的lvalue引用类型(即MyClass & ),这是转发参考的预期行为;在第二个参数中使用C时,您可以通过参考文献删除引用。

代码语言:javascript
运行
AI代码解释
复制
template<typename C, typename T>
void foo(C &&aclass, T (std::remove_reference_t<C>::*const memberFunc)(unsigned)) {

}

正如@Quentin所指出的,使用std::remove_reference还引入了非推断语境,这将防止从第二个参数推导C

票数 7
EN

Stack Overflow用户

发布于 2018-02-21 06:10:58

实际上,我刚刚发现,让一个通用的引用重载将它转发到一个l值引用版本是有效的。虽然不是特别优雅,但我觉得应该有更好的方法。

代码语言:javascript
运行
AI代码解释
复制
template<typename C, typename T>
void foo(C &aclass, T (C::*const memberFunc)(unsigned)) {
  // Code goes here.
}

template<typename C, typename T>
void foo(C &&aclass, T (C::*const memberFunc)(unsigned)) {
  foo(aclass, memberFunc);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48907948

复制
相关文章
1.javascript中的函数
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数(根据需要使用参数),以及置于括号中的待执行代码(功能),返回值(可选)。
joshua317
2022/03/25
5050
Python中的列表(1)
  所以说访问列表的元素,可以在列表名后加方括号,方括号内输入索引,即可访问对应索引的元素。(ps:索引从0开始)
py3study
2020/01/16
3.4K0
java1-7和1-8的排序代码
String[] atp = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer","Roger Federer", "Andy Murray","Tomas Berdych", "Juan Martin Del Potro"}; List<String> players = Arrays.asList(atp)
tea9
2022/07/16
2020
java1-7和1-8的排序代码
Python中的命名空间和作用域(1)
本文将介绍Python命名空间和作用域,它们用于分配Python程序中的对象。Python语言是一种能够实现面向对象编程的高级语言,或者说,在Python中,“万物皆对象”。
老齐
2020/08/11
9060
CentOS 7 与 CentOS 6的不同
CentOS 7 vs CentOS 6的不同 (1)桌面系统 [CentOS6] GNOME 2.x [CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统 [CentOS6] ext4 [CentOS7] xfs (3)内核版本 [CentOS6] 2.6.x-x [CentOS7] 3.10.x-x (4)启动加载器 [CentOS6] GRUB Legacy (+efibootmgr) [CentOS7] GRUB2 (5)防火墙 [CentOS6] i
Albert陈凯
2018/04/04
1.1K0
数据结构与算法 1-6 Python列表类型不同操作的时间效率
本系列是我在学习《基于Python的数据结构》时候的笔记。本小节首先回顾一下timeit代码执行时间测量模块,然后通过此模块测算Python中list列表一些操作的时间效率。
触摸壹缕阳光
2019/11/13
7660
数据结构与算法 1-6 Python列表类型不同操作的时间效率
枚举+优化(7)——前缀和1
例1  给定一个长度为N的数组:A1,A2,...,AN。(N <= 100000,1 <= A[i] <= 100000)。然后有M个询问,每次询问给两个整数L,R问A[L]~A[R]的和是多少。(M <= 100000)。  这道题最直接的做法就是每次询问的时候,用一个循环累加A[L]~A[R]的和,伪代码如下: Ask(L,R) Sum = 0 For i = L...R Sum += A[i] return Sum  上面这段伪代码,处理一个询问的时间复杂度是O(R-L),考虑到R最大是N
mathor
2018/06/19
5860
《JavaScript 模式》读书笔记(7)— 设计模式1
  这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
全栈程序员站长
2022/07/21
4510
《JavaScript 模式》读书笔记(7)— 设计模式1
这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
zaking
2020/09/02
5400
JavaScript基础1
什么是Javascript? Javascript是一种基于对象和事件驱动的, 与平台无关的 ,具有安全性的 ,弱类型的脚本语言。 为什么要用? 使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择。 Javascript的特点: 1.是一种脚本编写语言 Ja
汤高
2018/01/11
1K0
JavaScript 学习(1)
参考资料:http://www.w3school.com.cn/js/index.asp
lpe234
2020/07/28
8040
JavaScript笔记(1)
编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.
y191024
2022/09/20
6170
JavaScript笔记(1)
JavaScript 入门(1)
JavaScript,就是我们通常所说的JS,是一种嵌入到HTML页面中的脚本语言,由浏览器一边解释一边执行。
Qwe7
2022/04/03
3130
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
ECMAScript(通常称为 JavaScript)是一种经历了许多波折的脚本语言。它最初是为了实现 Netscape Navigator(第一批 Web 浏览器之一)的可扩展性而创建的。JavaScript 最初的命名考虑到了与 Java 的关联(Java 那时正迅速发展成为一种重要语言),多年来,它一直被视为两种语言中的次要语言。
疯狂的技术宅
2019/03/28
8930
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
JavaScript基础1
JavaScript写在<script></script>之间    <script type="text/javascript">表示在<script></script>之间的是文本类型(text),javascript是为了告诉浏览器里面的文本是属于JavaScript语言。      引用外部javascript文件:<script src="script.js"></script> 变量 var mychar 数组  var array =new Array(); 输出内容:    docume
用户1624346
2018/04/10
7350
JavaScript基础1
JavaScript入门(1)
Hello小可爱们,今天我们又要回到学习主题咯,前面学习了HTML和CSS的用法,今天我们就要为Web页面注入生命啦,那就是JavaScript,通过JavaScript我们可以让我们的页面动起来,这也是Web开发中的一座大山。
萌兔IT
2019/07/26
8360
JavaScript入门(1)
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
全栈程序员站长
2022/07/21
2650
《JavaScript 模式》读书笔记(6)— 代码复用模式1
GPDB6和GPDB7直连primary命令的不同
最近一直在使用GPDB7的版本进行学习,经常需要客户端psql连接primary进行验证,而连接primary必须使用维护模式时的命令:
yzsDBA
2022/12/27
3420
GPDB6和GPDB7直连primary命令的不同
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
zaking
2020/04/21
4240
《JavaScript 模式》读书笔记(6)— 代码复用模式1
点击加载更多

相似问题

python中的a=[1]和[1]有什么不同?

40

javascript中"1"+"1“& "1”-- "1“的两种不同结果

20

JavaScript和PHP中的RSA-SHA1 1签名不同

17

[1][1]和[1][0]在JavaScript中的结果

26

为什么(([]===[])+/-/)[1] = 'a‘和(1+{})[(1<<1)+1] = 'b’在javascript中?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文