有什么技巧可以避免在模板 class 中使用 `typename` 关键字吗?

Is there any trick to avoid the `typename` keyword inside a template class?

我正在努力实现如下目标:

template <typename T>
class MyClass {
    struct nested {
        using OtherT = // Some type derived from T
    };

protected:
    // Any way to avoid `typename` here?
    typename nested::OtherT member;
};

是否有任何方法可以使用嵌套在结构/命名空间/其他中的类型,这些类型是根据模板类型 T 计算的,而不需要使用 typename 关键字? 我愿意以任何其他方式声明 nested,它的目的只是保存类型。

编辑:我尝试这样做的原因是我将拥有从 T 派生的整个类型集合,这些类型已经在 [=16= 中可见],然后是 nested 内那些相同类型的密切相关变体。我希望使用 nested 以清晰简洁的方式区分它们。 这种情况会出现在代码库的很多地方,所以我希望避免在提到这些类型的地方看到 typename

不要把它们放在那样的类型中。如果您需要区分它们,请给它们起一个更具描述性的名称。即使您首选的机制有效,您也必须在名称前加上 nested:: 前缀。所以只需制作名称的那一部分并通过以下方式完成:

template <typename T>
class MyClass {
    using nested_OtherT = // Some type derived from T

protected:
    nested_OtherT member;
};