有什么技巧可以避免在模板 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;
};
我正在努力实现如下目标:
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;
};