c++ - 如何在C++中确定嵌套类结构的外部类

标签 c++ templates inner-classes type-deduction

想象一下,您有一个如下所示的嵌套类结构:

struct A
{
    struct B
    {
        struct C{};
    };
};

如果你给了一个C的实例,叫c like

A::B::C c;

是否可以推断

  • 最外层的类(这里是A)
  • 层次结构中的下一个类(此处为 B)
  • 嵌套数量(此处为 2)

通过模板、编译时递归和模板特化技术?我已经尝试了如下几个模板:

template<typename Outer , typename Inner , typename Outer::Inner>
struct nested
{
    typedef typename Outer::Innter type;
};

但是如您所见,我无法对 B 和 C 进行逐步推导。您有什么建议吗?

最佳答案

你可以创建一个你手动输入的特征:

struct A
{
    struct B
    {
        struct C{};
    };
};

template <typename T> struct outter {
    static constexpr const std::size_t count = 0u;
};

template <> struct outter<A::B::C>
{
    using type = A::B;
    static constexpr const std::size_t count = 2u;
};

template <> struct outter<A::B>
{
    using type = A;
    static constexpr const std::size_t count = 1u;
};

关于c++ - 如何在C++中确定嵌套类结构的外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725591/

相关文章:

java - 为什么编译器无法推断 Java 中内部类的泛型类型?

C++ 调用基类但返回派生类

c++ - 为什么我的模板特化不起作用?

c++ - 如何对内部模板类使用重新解释强制转换?

C++ 模板机制

html - 如何使用django在所有浏览器中播放wav文件?

java - 为什么子类可以通过内部类访问父类(super class)的私有(private)成员?

c++ - 在嵌入式 Linux 平台上使用 std::string 时出现段错误

c++ - 使用 QLockFile::setStaleLockTime() 但锁不会过时?

c++ - 从链表中删除节点