微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用 C++ 编写递归基类概念

如何解决用 C++ 编写递归基类概念

在 C++ 中,我想将类 T 的模板参数 Foo<T> 严格限制为 Foo<T> 的继承者。为此,我写了以下内容

template <typename TSelf> class Foo;

template <typename TSelf>
  requires (is_base_of<Foo<TSelf>,TSelf>)
class Foo
{
};

我得到的错误

'Foo': requires clause is incompatible with the declaration

我该如何解决这个问题?

解决方法

在 CRTP 中,派生类是不完整的。

您可以将该断言添加到应该作为析构函数调用的方法中:

template <typename TSelf>
class Foo
{
    // ...
    ~Foo() { static_assert(std::is_base_of_v<Foo<TSelf>,TSelf>); }
    // ...
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。