2016-11-21 70 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

    對於我必須處理的少數情況,這可能是一個可能的解決方案。非常感謝這個建議。 –