gpt4 book ai didi

C++ 概念 : CRTP

转载 作者:太空狗 更新时间:2023-10-29 20:35:50 25 4
gpt4 key购买 nike

可能只是这个概念不好,但我不明白为什么。并且没有找到任何带有构造函数的示例。或者它可能与构造函数无关......

template < typename T >
concept bool C_Object() {
return requires {

T();
};
}

template < C_Object Object>
class DefaultManager {

// Content;
};

template < C_Object Derived >
class Component {

// Content
};

struct Test : public Component<Test> {

int data;

Test() = default;
};

int main() {

Test test;
return 0;
}

报错:

test2.cpp:21:36: error: template constraint failure
struct Test : public Component<Test> {
^
test2.cpp:21:36: note: constraints not satisfied
test2.cpp:2:14: note: within ‘template<class T> concept bool C_Object() [with T = Test]’
concept bool C_Object() {
^~~~~~~~
test2.cpp:2:14: note: the required expression ‘T()’ would be ill-formed

这听起来像是:“嘿,我的代码坏了,请修复它”,抱歉。

谢谢

祝你今天愉快

最佳答案

问题出在这里:

struct Test : public Component<Test> {

只要您命名一个受约束类模板的特化,就会根据约束验证给定的参数。在这种特殊情况下,这意味着 C_Object<Test>检查是否满意,但由于 Test不完整 - 编译器尚未解析其定义 - C_Object不满意。

这是 CRTP 基础的经典问题的“概念”版本:您必须延迟派生类的检查,直到其定义完成。

关于C++ 概念 : CRTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853060/

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