首页 > 解决方案 > CRTP 看不到派生类中定义的结构

问题描述

在尝试使用 CRTP 时,我遇到了一些我不理解的行为。

template<class This>
struct Base
{
    typename This::Event getEvent() { return {}; }
};

struct Derived : Base<Derived>
{
    struct Event { };
};

int main()
{
    auto x = Derived();
    auto event = x.getEvent();
}

我收到错误

sketch2.cpp:5:24: error: no type named 'Event' in 'Derived'
        typename This::Event getEvent() { return {}; }
        ~~~~~~~~~~~~~~~^~~~~

但它应该解析为Derived::Event,这是定义明确的,不是吗?基类的方法是否可以像这样依赖于派生类中定义的类型?

标签: c++crtp

解决方案


推荐阅读