在模板和 class 声明之间定义类型别名,以便从中继承

Define type alias between template and class declaration in order to inherent from it

我有一个 class 模板,它在其实现中使用了一些类型别名,并且还继承自同一类型:

template<typename TLongTypename, 
         typename TAnotherLongTypename, 
         typename THeyLookAnotherTypename>
class A : SomeLongClassName<TLongTypename, 
                           TAnotherLongTypename,
                           THeyLookAnotherTypename>
{
    using Meow = SomeLongClassName<TLongTypename, 
                                   TAnotherLongTypename, 
                                   THeyLookAnotherTypename>;
    
    // ... (using Meow a lot)
};

自然我想继承类型别名 Meow 而不是长名称。有什么好的方法可以做到这一点,希望 Meow 将在模板范围内但在 class 范围之前定义?

您可以直接在模板参数列表中将类型别名 Meow 声明为默认模板参数,这意味着您只需拼写一次:

template<typename TLongTypename, 
         typename TAnotherLongTypename, 
         typename THeyLookAnotherTypename,
         // declare Meow once here 
         typename Meow = SomeLongClassName<TLongTypename, 
                                           TAnotherLongTypename,
                                           THeyLookAnotherTypename>>
class A : Meow   // inherit
{
    Meow X;   // use
};