gpt4 book ai didi

c++ - 为什么在通过 CRTP 访问派生类中的 typedef 时出错?

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

我无法理解为什么下面的代码无法编译——有人可以解释一下吗?

如何从基类访问派生类中的 typedef?

template<class Derived>
struct Test
{
template<class T>
typename Derived::value_type foo(T);
};

struct Derived : public Test<Derived>
{
typedef int value_type;
};

最佳答案

申报时Derived , Derived还不是一个完整的类型——您才刚刚开始声明它!因此在特化Test<Derived> ,模板参数是一个不完整的类型,因此您不能引用嵌套名称,例如 Derived::value_type -- 这是循环逻辑。

您可以通过将返回类型作为一个单独的参数来回收问题:

template <typename T, typename R> struct Test
{
template <typename U> R foo(U);
};

template <typename R>
struct BasicDerived : public Test<BasicDerived, R>
{
typedef R value_type;
};

typedef BasicDerived<int> Derived;

关于c++ - 为什么在通过 CRTP 访问派生类中的 typedef 时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883365/

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