How can I get the innermost template parameter type?

后端 未结 2 660
猫巷女王i
猫巷女王i 2020-12-21 01:26

Q

In a dummy example of a class

typedef myStruct>> mv;

int is the innermost

2条回答
  •  时光说笑
    2020-12-21 01:56

    Building on 0x499602D2's answer, we get the following to only consider the first template parameter if ever there are several. And yes it compiles. It's also slightly simpler.

    #include 
    #include 
    #include 
    
    template
    struct innermost_impl
    {
        using type = T;
    };
    
    template class E, typename Head, typename... Tail>
    struct innermost_impl>
    {
        using type = typename innermost_impl::type;
    };
    
    template
    using innermost = typename innermost_impl::type;
    
    template
    struct X;
    
    static_assert(std::is_same>>>, int>::value, "");
    
    static_assert(
        std::is_same>>>, int>::value,
        ""
    );
    
    int main()
    {
    }
    

    Note that no attempt is made to validate that the same template is used over and over.

提交回复
热议问题