我正在努力实现如下目标:
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
的类型已经在 MyClass
内部可见,然后是 nested
中那些相同类型的密切相关变体.我希望使用 nested
以简洁明了的方式区分它们。
这种情况会出现在代码库的很多地方,所以我希望避免看到 typename
到处都提到这些类型。
最佳答案
不要把它们放在那样的类型中。如果您需要区分它们,请给它们起一个更具描述性的名称。即使您首选的机制有效,您也必须在名称前加上 nested::
前缀。所以只需制作名称的那一部分并通过以下方式完成它:
template <typename T>
class MyClass {
using nested_OtherT = // Some type derived from T
protected:
nested_OtherT member;
};
关于c++ - 有什么技巧可以避免在模板类中使用 `typename` 关键字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58580890/