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++ 概念:检查是否派生自具有未知模板参数的模板化类 的相关文章

随机推荐

  • 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