C++ 概念:检查是否派生自具有未知模板参数的模板化类

2024-03-31

有没有一种方法可以使用 C++ 概念来要求类派生自模板类,而模板类的模板参数又是另一个模板类的派生类。

Example:

template <class T>
class A{};

template <class T>
class B{};

class X{};
class Y : public A<X> {};

class Z : public B<Y> {};

我怎样才能办理登机手续B, that T是这样的形式std::is_base_of<A<X>,T>对于一些X没有具体说明什么X是? 我不想添加X到模板参数列表B,因为我不想在每个实例中更改代码B源自(例如最后一行class Z).


如果您想检查以下专业A具体来说,这并不太难。

template <class C>
concept A_ = requires(C c) {
    // IILE, that only binds to A<...> specialisations
    // Including classes derived from them
    []<typename X>(A<X>&){}(c);
};

lambda 基本上只是重载接受的函数的简写A专业化。从此类专业衍生的课程也计入其中。我们使用我们正在检查的类型的参数调用 lambda...并且约束是 true 或 false,具体取决于调用是否有效(参数被接受)。

然后,只需将其插入即可:

template <A_ T>
class B{};

这是现场工作 https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:%271%27,fontScale:14,fontUsePx:%270%27,j:1,lang:c%2B%2B,selection:(endColumn:22,endLineNumber:20,positionColumn:22,positionLineNumber:20,selectionStartColumn:22,selectionStartLineNumber:20,startColumn:22,startLineNumber:20),source:%27%0Atemplate+%3Cclass+T%3E%0Aclass+A%7B%7D%3B%0A%0Atemplate+%3Cclass+C%3E%0Aconcept+A_+%3D+requires(C+c)+%7B%0A++++//+IILE,+that+only+binds+to+A%3C...%3E+specializations%0A++++//+Including+classes+derived+from+them%0A++++%5B%5D%3Ctypename+X%3E(A%3CX%3E%26)%7B%7D(c)%3B%0A%7D%3B%0A%0Atemplate+%3CA_+T%3E%0Aclass+B%7B%7D%3B%0A%0Aclass+X%7B%7D%3B%0Aclass+Y+:+public+A%3CX%3E+%7B%7D%3B%0A%0Aclass+Z+:+public+B%3CY%3E+%7B%7D%3B%0A%0A//+This+won!%27t+compile%0A//class+M+:+B%3CX%3E+%7B%7D%0A%0Aint+main()+%7B%0A++++%0A%7D%27),l:%275%27,n:%270%27,o:%27C%2B%2B+source+%231%27,t:%270%27)),k:50,l:%274%27,n:%270%27,o:%27%27,s:0,t:%270%27),(g:!((h:executor,i:(argsPanelShown:%271%27,compilationPanelShown:%270%27,compiler:g112,compilerOutShown:%270%27,execArgs:%27%27,execStdin:%27%27,fontScale:14,fontUsePx:%270%27,j:1,lang:c%2B%2B,libs:!(),options:%27-std%3Dc%2B%2B20+-pedantic-errors+-Wall+-Wextra+-Og%27,source:1,stdinPanelShown:%271%27,tree:%271%27,wrap:%271%27),l:%275%27,n:%270%27,o:%27Executor+x86-64+gcc+11.2+(C%2B%2B,+Editor+%231)%27,t:%270%27)),header:(),k:50,l:%274%27,n:%270%27,o:%27%27,s:0,t:%270%27)),l:%272%27,n:%270%27,o:%27%27,t:%270%27)),version:4.

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

C++ 概念:检查是否派生自具有未知模板参数的模板化类 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • PL/SQL 逗号分隔列表;删除重复项并放入数组中

    我有一个以逗号分隔的列表作为 PL SQL 过程中的字符串 我需要 删除重复项 将列表放入数组中 我发现了多种方法可以做到其中之一 但不能同时做到两者 有什么帮助吗 有一个众所周知的 SQL 技巧可以将逗号分隔的列表转换为行 只需使用这个技
  • 限制 .map 循环中的项目

    我想问一下如何限制我的 map例如 仅循环到 5 个项目 因为当前当我访问 api 时 它返回 20 个项目 但我只想显示 5 个 我发现大多数情况只是循环整个对象数组 而不是将其限制为多个项目 注意 我无法控制 API 因为我只是使用 m
  • libtool:i686-pc-mingw32 共享中不允许未定义的符号

    我正在使用自动工具作为我的库的构建系统 最近库被移植到Windows 尽管我遇到了一个奇怪的错误 但库编译和链接成功 配置和make后只有静态库 除了警告之外 一切看起来都很好libtool libtool undefined symbol
  • 在 C# 中,有没有办法在运行时确定类的成员?

    假设我有一个名为 foo 的类 它有 3 个公共成员 foo1 foo2 和 foo3 现在假设我正在编写一个函数 它将 foo 类的实例作为参数 但是当我编写这个函数时 我不知道它有哪些公共成员 有没有办法让我在运行时确定它具有公共成员
  • React.js 通过 Router 传递参数,而不是在 URL 中

    您好 我想从一个页面移动到另一页面并传递参数search and type 如果 URL 中没有这些参数 我可以使用 React Router 来实现此目的吗 我正在看这个https github com rackt react route
  • 如何更改应用栏颤动上的文本和图标的颜色

    我在更改颤动应用栏上的文本和图标小部件的颜色时遇到问题 我已经在材料应用程序中尝试过主题 但它不起作用 这是在哪里工作 title Text Profile style TextStyle color Colors black 但我想将其应
  • 在窗口中的标题栏内/上方添加用户控件

    在 WPF 中 我想在窗口的标题栏中 上方添加一个 userControl 如下所示 红色部分是UserControl 绿色部分是标题栏 现在我希望能得到你的一些建议 需要扩展Window类或者只是自定义Window的样式 最好提供源码 您
  • MVC 2 AntiForgeryToken - 为什么对称加密 + IPrinciple?

    我们最近将解决方案更新为 MVC 2 这更新了AntiForgeryToken作品 不幸的是 这不再适合我们的 AJAX 框架 问题是 MVC 2 现在使用对称加密来编码有关用户的一些属性 包括用户的Name财产 来自IPrincipal
  • 我如何消除 glu.h 中的这些编译器错误?

    尝试使用这个tutorial http www opengl tutorial org beginners tutorials 在带有 netbeans 和 cygwin 4 8 1 的 64 位 Windows 8 上 我收到很多这样的错
  • 如何解决 xcode 5 中的苹果 LLVM 5.0 错误?

    我在模拟器和设备上运行我的应用程序没有任何问题 突然我收到这个错误 fatal error file Applications Xcode app Contents Developer Platforms iPhoneOS platform
  • SVN加密密码存储

    我在 Ubuntu 机器上安装了 SVN 但我无法理解某些事情 每当我从终端检查某些内容时 我都会收到有关保存未加密密码的错误 ATTENTION Your password for authentication realm lt gt S
  • 在 macOS 上的 CLion 中导入 Bazel 项目失败

    我在 CLion 上安装了 Bazel 插件 并尝试导入新的 Bazel C 项目 但我不断遇到这些错误 tensorflow gpu 1 8 0lft1 cp27 cp27mu linux x86 64 whl 在此平台上不受支持的轮子
  • Selenium 预期条件 - 可以使用“或”吗?

    我将 Selenium 2 WebDriver 与 Python API 一起使用 如下所示 from selenium webdriver support import expected conditions as EC code tha
  • 波斯语 @font-face 在 Chrome 中不起作用,是否有 Bug?

    不确定我的标题是 Chrome 中的错误还是我的 CSS 有问题 这是我正在谈论的内容的演示 演示链接 http 3p3r com farakhan 问题是我在我的网站中使用自定义波斯语字体 名为BMitra 它在公共领域是完全免费的 并且
  • 片段在从其他片段返回时重新创建

    我在片段方面面临问题 在我的场景中 有两个 Fragment 与 FragmentActivity 关联 在FragmentActivity中 有一个容器布局 Frame Layout 其中所有的fragment都会被替换 public v
  • OWIN OAuth 2.0 - 不记名令牌永不过期

    我正在使用以下 OAuth 提供程序和选项 UserManagerFactory gt new UserManager
  • “语句在命名空间中无效”错误消息

    我有一个问题 出于某种原因 视觉工作室说有一个错误 它显示 语句在命名空间中无效 我不知道如何解决它 这就是我的编码的样子 前两行有一条蓝色波浪线 以 Private Sub 开头 Private Sub btnPlay Click ByV
  • Java Azure 请求签名

    我正在使用最新的 Azure SDK 存储模拟器 我正在尝试向我的 blob 签署请求 当我运行下面的代码时 我收到身份验证错误 尽管我多次检查代码是否符合 Azure SDK blob 访问规范 但我无法弄清楚出了什么问题 这是控制台输出
  • Angular 1.5,从父控制器调用组件中的函数

    Angular 1 5 组件可以轻松地从组件创建对父级的回调 有没有办法可以从父控制器中的函数调用组件中的函数 假设我的组件称为任务运行器 下面是它在父容器中的 HTML
  • C++ 概念:检查是否派生自具有未知模板参数的模板化类

    有没有一种方法可以使用 C 概念来要求类派生自模板类 而模板类的模板参数又是另一个模板类的派生类 Example template