gpt4 book ai didi

c++ - 如何推断 CRTP 中的类型?

转载 作者:太空狗 更新时间:2023-10-29 23:13:33 25 4
gpt4 key购买 nike

我想在 C++ 模板中实现 CRTP。代码如下:

template <typename T>
class A{
public:
typedef typename T::Scalar Scalar;
};
template <typename T>
struct B:public A<B<T> > {
public:
typedef T Scalar;
};

但是当我compile the code编译器显示:

error: no type named ‘Scalar’ in ‘struct B<int>’

有人能解释一下吗?

最佳答案

错误是由于类型不完整。看下面一行:

template<typename T>
struct B : public A<B<T>>

B<T>的主体尚未开始,您将其用作构建 A<T> 的参数.实际上这是允许的,但如 Quentin's answer 中所述,这是 CRTP 的警告。除了这个答案,这里还有另一种方式:

template <template<typename> class Base, typename T>
class A{ // use `<typename...>` for C++11
public:
typedef T Scalar;
// use `Base<T>` wherever required
};

template <typename T>
struct B : public A<B, T> {
public: // ^^^^^^^
typedef T Scalar;
};

关于c++ - 如何推断 CRTP 中的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38241741/

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