作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
标题中几乎给出了这个问题。 Please considere the following godbolted code:
#include <iostream>
struct Base{};
struct Derived : Base{};
template<typename T>
concept IsDerivedFromBase = std::same_as<T, Base>;
template<typename T>
concept IsNotDerivedFromBase = not IsDerivedFromBase<T>;
template <IsDerivedFromBase T>
void foo(T bar) {std::cout << "IsBase" << std::endl;}
template <IsNotDerivedFromBase T>
void foo(T bar) {std::cout << "IsNotBase" << std::endl;}
int main()
{
Base a;
foo(a);
Derived b;
foo(b);
Base* c = new Derived{};
foo(*c);
delete c;
}
上面代码的输出如下:
IsBase
IsNotBase
IsBase
我在问是否有可能以某种方式修改概念以模仿多态性。
IsBase
IsNotBase
IsNotBase
最佳答案
与概念相关的一切都是在编译时确定和“制定出来的”。暂时搁置 SFINAE:失败的概念要求会导致格式错误的程序和编译失败。
另一方面,C++ 中唯一可能“知道”您的 c
的部分。并没有“真正”指向 Base
是 dynamic_cast
,在 处得到评估运行时间 .就 C++ 中的其他所有内容而言,您的 c
指向 Base
例如,这就是讨论的结束。
因此,总而言之,就编译时评估的所有内容而言,您的 c
指向 Base
没有任何其他概念可以使用,这将表明其他任何东西。
关于c++ - 是否可以使用 c++20 的概念来模拟多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65029749/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!