首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CRTP和模板参数限制

CRTP和模板参数限制
EN

Stack Overflow用户
提问于 2018-09-20 08:54:45
回答 1查看 208关注 0票数 7

我正在尝试使用CRTP进行实验,但我对下面的代码为什么不编译感到困惑。

代码语言:javascript
复制
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX>
  {
  // This does NOT compile
  };

template<template<class...> class CBase>
struct ComponentY : public CBase<int>
  {
  // This does compile
  };

您知道在CRTP情况下,模板模板参数是否有某些限制吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 08:59:26

类模板名称表示“当前专门化”(即,它是一个注入的类名),仅在类模板定义的开头{之后,在其作用域内。在此之前,它是一个模板名。

因此,CBase<ComponentX>是将模板作为参数传递给CBase的一种尝试,CBase需要一组类型。

修复方法相当简单:

代码语言:javascript
复制
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX<CBase>> // Specify the arguments
  {
  // This should compile now
  }; 

ComponentX<CBase>是您希望作为类型参数提供的专门化的名称。

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

https://stackoverflow.com/questions/52421194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档