c++ 如何从基类继承using声明

umuewwlo  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(213)

我在类Config中声明了类型,将其传递给基类Parent,这样Child就可以访问。
其思想是每个Child(有很多)不必一直声明它自己的using声明,因为它们已经在Parent中了。
但是,这不能编译。Child不能看到Parent::Type
有可能以某种方式实现这一点吗?

template<class CONFIG>
struct Parent
{
    using Type = typename CONFIG::Type;
    // Plus a lot more types....
};

template<class CONFIG>
struct Child : public Parent<CONFIG>
{
    void x(Type p){}     // Compiler error. Cannot see Parent::Type
};

struct Config
{
    using Type = int; 
    // Plus a lot more types....
};

int main() 
{
    Child<Config> c;
    return 0;
}
hm2xizp9

hm2xizp91#

它们是自动继承的,但不可见。它们不可见的原因是,在名称查找过程中不考虑模板基类。它不是特定于类型的,成员变量也是如此。如果希望它们是可访问的,则需要将它们引入范围:

struct Child : public Parent<CONFIG>
{
    using Base = Parent<Config>;
    using typename Base::Type;
    void x(Type p){}     // Compiler error. Cannot see Parent::Type
};

相关问题