作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现从基模板继承的派生类,将派生类作为其模板参数(希望下面的示例可以解决问题):
template <class T>
struct S
{
T f() {return T();}
};
struct D : public S<D>
{
};
这也可以在 gcc、clang 和 msvc 上编译并运行良好。现在,我想“确保”模板参数继承自基类:
#include <concepts>
template <class T>
concept C
= requires ( T t )
{
{ t.f() };
};
template <C T>
struct S
{
T f() {return T();}
};
struct D : public S<D>
{
};
然而,这被每个编译器拒绝,clang 提供了最多的洞察力:
error: constraints not satisfied for class template 'S' [with T = D]
struct D : public S<D>
^~~~
note: because 'D' does not satisfy 'C'
template <C T>
^
note: because 't.f()' would be invalid: member access into incomplete type 'D'
{ t.f() };
我知道编译器来自哪里:
D
当必须检查约束时还没有完全定义,因此它失败代替必要的信息。也就是说,我有点失望,在评估尚未检查的约束之前没有尝试完成派生类的定义。
最佳答案
您可以在基类的默认构造函数中检查要求
#include <type_traits>
template<class Derived>
class Base
{
public:
Base()
{
static_assert(std::is_base_of_v<Base<Derived>, Derived>);
}
};
class Derived : public Base<Derived>
{ };
这也必须在任何其他用户定义的非复制和非移动 base 构造函数中进行检查。这是有效的
Derived
在构造函数实例化时完全定义。
关于c++ - 受限CRTP过早拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68401401/
我的测试代码: int SIZE = 1900; int[][] array = new int[SIZE][]; for (int i = 0; i < SIZE; i++) { array[i
我有一堆 WAV 文件和一个将它们复制到另一个目录的脚本,但使用 SoX 处理了一些文件。输出的文件都应该有 1 个 channel ,采样率不超过 44.1khz。我的大多数文件要么有一个以上的 c
我正在运行一个相当占用内存的 Python 脚本,但似乎我的机器正在提前终止进程。我安装了 16GB(并通过 lshw -class memory 确认),但我的进程似乎在使用量达到 4GB 左右时被
我很难确定在使用 .NET 的 HttpWebRequest 类调用远程服务器(特别是 REST Web 服务)时是否有办法处理潜在的连接问题。根据我的调查,WebClient 类的行为是相同的,这在
所以我有这个网址: http://test.com/afolder/who-else-wants-to-make-horror-movies%3f/ 这是 URL 编码版本: http://test.
我是一名优秀的程序员,十分优秀!