gpt4 book ai didi

c++ - Concepts lite是否会改变CRTP实现静态多态的需求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:28 27 4
gpt4 key购买 nike

自从几年前我发现了 CRTP 以来,我在很多地方都使用它来为非常密集的面向计算的代码实现编译时多态性。当一个人关心运行时的通用性和最大性能时,以通用方式将成员函数“注入(inject)”到类中是很棒的。

我在 concepts lite 上阅读/观看了几件事这将是(我希望)下一个 C++ 标准的一部分。以更抽象和通用的方式设计功能绝对很棒,避免了我目前使用的 SFINAE/std::enable_if 的糟糕行。

我还没有测试过实现概念的 g++ 分支来玩弄它们,并以一种新的方式研究我喜欢的元编程方法。但也许你们中的一些人有。我的第一个想法是概念不会解决静态多态性的问题,但由于这类事情可能严重依赖技巧,我可能是错的。所以我的问题如下:concepts lite 是否能够以更方便的方式实现编译时多态性(正如我们目前可以通过 CRTP 所做的那样)?(示例欢迎使用代码)。

最佳答案

我不应该这么认为。 Concepts Lite 将取代您对 enable_if 的使用,但我不确定它是否允许 CRTP 的新技术。另一方面,可能会有一些有趣的事情可以做。

我会说我在较早的概念精简版实现中遇到了一些 CRTP 问题。检查约束要求类型参数是完整类型。如果在派生类上有一个参数化的基类,则需要将检查推迟到使用点。例如:

template<Fooable D>
struct crtp {
void f() {
static_cast<D*>(this)->g();
}
};

struct derived : crtp<derived> { // Error!
};

当您尝试检查 Fooable<derived> 时, derived 还没有被定义。最好这样写:

template<typename D>
struct crtp {
void f() requires Fooable<D>() {
static_cast<D*>(this)->g();
}
};

现在,Fooable<D>()仅在 f() 时检查叫做。

仅供引用。

关于c++ - Concepts lite是否会改变CRTP实现静态多态的需求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com