首页 > 解决方案 > 通过对象访问类子类型

问题描述

class Foo{

public:
    struct Bar{};

};

...

Foo foo;

foo.Bar bar; //error

我的编译器说无效使用struct Foo::Bar. 当然,如果我愿意,我可以在这里命名子类Foo::Bar,但如果foo有一个很长的嵌套模板类型和/或使用 auto 创建,那么通过这样的对象访问子类型会很方便。

*编辑:要清楚,我想创建一个 Foo::Bar 类型的对象,而不必编写Foo::.

标签: c++classc++17subtype

解决方案


遵循类似的先前响应,使用decltype 说明符

class Foo{

public:
    struct Bar{};

};

int main() {
    Foo foo;
    decltype(foo)::Bar bar;
    const Foor foofoo;
    decltype(foofoo)::Bar barbar;
}

编辑:包括引用或指针的解决方案

#include <type_traits>
...

void fref(const Foo &foo) {
   typename std::remove_reference<decltype(foo)>::type::Bar bar;
}

void fpointer(Foo *foo) {
   typename std::remove_reference<decltype(*foo)>::type::Bar bar;
}

推荐阅读