2016-11-21 68 views
0

想象一下,你有一个嵌套类结构像下面这样:如何确定外部类在C嵌套类结构++

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

如果你给一个C的实例,名为c像

A::B::C c; 

是能够推断

  • 最外类(这里A)
  • 通过模板

下一个类层次结构(这里B)

  • 的嵌套(这里是2)的数量,编译时递归和模板专业化的技术?我试过几个模板,如下面以下几点:

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

    但你可以看到,我不能够为B的逐步扣除做递归和C.你有一些建议吗?

  • +0

    我很好奇,想知道你想通过了解嵌套结构 – Altainia

    +0

    简单地谈过,解决什么问题,它是一个详细算法。 –

    +0

    你能解释downvote吗?我想了解我的错误并改进我的帖子! –

    回答

    0

    编号就编译器而言,A,A::BA::B::C是独立的无关类(除了名称查找/范围)。

    如果你知道你的实现的格式为type_info::name(),你也许可以在运行时做些什么。

    1

    您可以创建一个特点,你手动的饲料:

    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; 
    }; 
    
    +0

    对于我必须处理的少数情况,这可能是一个可能的解决方案。非常感谢这个建议。 –