首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >启用if/else类成员模板实例化

启用if/else类成员模板实例化
EN

Stack Overflow用户
提问于 2016-05-25 08:00:46
回答 2查看 245关注 0票数 0

有人能告诉我如何基于预定义基组的不同派生类启用if/ set类成员模板吗?让我使用以下示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum class Type {
  TYPEA,
  TYPEB
};

// Predefined in libraries.
class BaseA {...};
class BaseB {...};

class Foo {
  template <typename Derived, Type type>
  void foo();
};

// User-derived
class DerivedA : public BaseA {};
class DerivedB : public BaseB {};

通常,我们需要两个模板类型名来调用成员foo。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Foo obj;
obj.foo<DerivedA, Type::TypeA>()
obj.foo<DerivedB, Type::TypeB>();

但是,这种本机方法似乎很长,因为如果第二个模板参数Type::TypeAType::TypeB来自预定义的基,那么编译器显然可以通过第一个参数DerivedADerivedB推导它们。我注意到c++11提供了is_base_of模板,但我不知道如何在我的情况下使用它。更具体而言,以下是预期的解决办法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
obj.foo<DerivedA>();  // Automatically deduce type = Type::TypeA
obj.foo<DerivedB>();  // Automatically deduce type = Type::TypeB

如果编译无法从第一个类型名称中推断出Type,那么它应该返回到正常声明obj.foo<MyClass, MyType>,其中MyTypeType::TypeAType::TypeB

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-25 08:48:51

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<Type t>
using etype_tag = std::integral_constant<Type, t>;

template<class T>
struct tag_t {
  using type=T;
  template<class D,
    std::enable_if_t<std::is_base_of<T, D>::value, int>* =nullptr
  >
  constexpr tag_t( tag_t<D> ) {}
  constexpr tag_t() = default;
  constexpr tag_t(tag_t const&) = default;
};

template<class T>
constexpr tag_t<T> tag{};


constexpr etype_tag<Type::TYPEA> get_etype( tag_t<BaseA> ) { return {}; }
constexpr etype_tag<Type::TYPEB> get_etype( tag_t<BaseB> ) { return {}; }

template<class T>
constexpr decltype( get_etype( tag<T> ) ) etype{};

现在,etype<Bob>是你想要的编译时常数积分常数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Foo {
  template <typename Derived, Type type=etype<Derived>>
  void foo();
};

第二个论点(通常)是多余的。

您可以在声明了get_etype的名称空间中,或者在tag_t的名称空间中,或者在您要使用的扩展get_etype类型的名称空间中,使用更多重载来扩展get_etype,并且etype将自动获得支持(假设它是在可见扩展的上下文中使用的:该需求的失败使您的程序格式不正确)。

实例化

票数 0
EN

Stack Overflow用户

发布于 2016-05-25 08:24:00

听起来你只是想要一个默认的模板参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Foo {
  template <typename Derived, Type type = get_type_from<Derived>::value>
  void foo();
};

其中get_type_from<>是一个元函数,稍后将根据您实际如何计算Type来填充。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37442340

复制
相关文章
访问令牌JWT
By reference token(透明令牌),随机生成的字符串标识符,无法简单猜测授权服务器如何颁 发和存储资源服务器必须通过后端渠道,发送回OAuth2授权服务器的令牌检查端点,才能校验令牌 是否有效,并获取claims/scopes等额外信息
乐心湖
2020/08/02
1.7K0
Docker镜像详谈(3): 镜像内容存放在哪里?
据说重要的事情要说三遍,那我再表述一下个人观点:Docker 镜像是 Docker 的灵魂所在。
Henry Zhang
2019/04/12
8.6K0
Docker镜像详谈(3): 镜像内容存放在哪里?
2019年CIO应该把钱花在哪里?这个调查告诉你
新的一年,许多CIO都在考虑把预算放在哪个方向,对哪些领域的预算增加一些,对哪些领域的投资减少一些。
人称T客
2019/05/08
4870
2019年CIO应该把钱花在哪里?这个调查告诉你
这家人工智能公司告诉你应该把钱投向哪里
在2000年代中期的某个时候,对冲基金所有者想出了一个点子。金融市场是受新闻影响的—所以如果你能彻底地理解新闻,而且能非常迅速,那你就能抢在市场变化前面。利用人工智能技术,他们设计了一种软件,能实时分析爆炸性新闻,评估新闻的意义,并且能在数秒内根据上述分析进行交易。 就像在对冲基金领域的很多事情一样,这种人工智能技术仍然只是亿万富豪和专业投资者的专属。但是Amareos,一家香港创业企业,正想法设法将这项技术带给普通的投资人。 测量世界的温度 “我们尽力将大数据技术民主化,”Philippe EI-As
点滴科技资讯
2018/04/28
2.7K0
这家人工智能公司告诉你应该把钱投向哪里
XXL-JOB访问令牌(AccessToken)设置
为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
Li_XiaoJin
2022/12/28
20.8K0
XXL-JOB访问令牌(AccessToken)设置
访问令牌过期后,如何自动续期?
JWT是JSON Web Token的缩写,是为了在网络应用环境间传递声明而执行的- -种基于JSON的开放标准((RFC 7519)。JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程,特别适用于分布式站点的单点登录(SSO) 场景。
Tinywan
2023/03/08
2.6K0
访问令牌过期后,如何自动续期?
C/C++ 实现提升访问令牌权限
在我们编程实现一些系统操作的时候,往往要求我们执行操作的进程拥有足够的权限方可成功操作。比如,我们使用 ExitWindows 函数实现关机或重启操作的时候,就要求我们的进程要有 SE_SHUTDOWN_NAME 的权限,否则,会忽视不执行操作。这时,我们唯一能够做的,就是按照要求,提升我们进程的权限。
微软技术分享
2022/12/28
7900
怎样把DataGrid存放在ViewState中的无用数据卡掉
作者:无间道的博客http://www.cnblogs.com/wangsaokui/article网络
Java架构师必看
2021/03/22
5150
JWT应该保存在哪里?
最近几年的项目我都用JWT作为身份验证令牌。我一直有一个疑问:服务端发放给浏览器的JWT到底应该存储在哪里?这里只讨论浏览器的场景,在这个场景里有三种选择。
码农小胖哥
2021/10/19
2.2K0
Apache APISIX 默认访问令牌漏洞 (CVE-2020-13945)
百度:API网关,软件术语,两个相互独立的局域网之间通过路由器进行通信,中间的路由被称之为网关。
网e渗透安全部
2022/06/15
2.9K0
Apache APISIX 默认访问令牌漏洞 (CVE-2020-13945)
Groovy 我的Class在哪里
通过将getLocation方法添加到Class类,Groovy 2.5.0可以获得Class文件的位置。 如果Class是JDK的一部分,则返回的位置是null,否则是我们使用Class文件获取JAR文件或源文件(如果可用)的位置。
白石
2019/08/23
6180
springcloud中feign的@FeignClient应该写在哪里?
最近项目组拿了友商的springcloud alibaba项目来进行改造,在翻阅他们的代码时候,发现他们把@FeignClient写在服务提供方的API上,他们这样的写法成功的引起我的注意,于是抱着好学的心态请教友商的开发人员,于是一篇水文就这么诞生了
lyb-geek
2020/11/28
2.2K0
springcloud中feign的@FeignClient应该写在哪里?
计算机网络:随机访问介质访问控制之令牌传递协议
在轮询访问中,用户不能随机地发送信息,而要通过一个集中控制的监控站,以循环方式轮询每个结点,再决定信道的分配。当某结点使用信道时,其他结点都不能使用信道。典型的轮询访问介质访问控制协议是令牌传递协议,它主要用在令牌环局域网中。
timerring
2022/11/18
1K0
我能力的边界在哪里?
导读:能力的边界绝不是自己一出道就给自己画的圆,而是在实践中通过不断地挑战未知探索出来的。那么,这个边界就不可能是个光滑的界线,更像是一个个触角延伸在四方,不断地吸取养分,从而作用于自己的核心能力之上。
用户1756920
2018/07/23
6620
我能力的边界在哪里?
请问怎么把我的一个长网址设置到域名访问?
比如:我的网站是https://www.bw3785.com/pjie 我注册了腾讯的bw5188.com 我希望以后别人输入bw5188.com就可以访问我的第一个长网址,该如何实现? 这个问题很头疼,在域名解析里面找了半天没找到呢 比如:我的网站是https://www.bw3785.com/pjie 我注册了腾讯的bw5188.com 我希望以后别人输入bw5188.com就可以访问我的第一个长网址,该如何实现? 这个问题很头疼,在域名解析里面找了半天没找到呢
用户6354929
2019/10/02
3.7K0
Python 分析天气,告诉你中秋应该去哪里
中秋佳节将近,不知道各位小伙伴儿有没有想好去哪里玩呢。不过说实在的,每到节假日,到处都是人山人海,那句“我动也不能动”,还不时的出现在我的耳畔呢。
1480
2019/09/10
4320
Python 分析天气,告诉你中秋应该去哪里
Python 分析天气,告诉你中秋应该去哪里
中秋佳节将近,不知道各位小伙伴儿有没有想好去哪里玩呢。不过说实在的,每到节假日,到处都是人山人海,那句“我动也不能动”,还不时的出现在我的耳畔呢。
周萝卜
2020/05/22
3770
授权服务是如何颁发授权码和访问令牌的?
授权服务如何生成访问令牌? 访问令牌过期了而用户又不在场的情况下,又如何重新生成访问令牌?
JavaEdge
2021/02/23
2.8K0
授权服务是如何颁发授权码和访问令牌的?
我靠(call) ,我的未来(Future)在哪里???
大家好,我是 cxuan,之前一直在分享操作系统相关的文章,兜兜转转回到了 Java 文章分享,本篇文章是读者投稿,来和你一起聊一聊 Future ~
cxuan
2020/08/02
5290
我说我不会算法,阿里把我挂了。[通俗易懂]
工作已经有一段时间了,有的时候会跟同事们打趣:“如果你让我现在去手写一个快速排序,我怕是真的写不出来”。
全栈程序员站长
2022/08/30
2830
我说我不会算法,阿里把我挂了。[通俗易懂]

相似问题

mapbox访问令牌-我应该把它放在哪里?

10

我应该把许可证文件存放在哪里?

22

我应该把用户上传的照片存放在哪里?

11

我的Git个人访问令牌存放在哪里?

156

API访问令牌存放在哪里?

131
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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