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

标签 c++ templates c++17 dependent-type

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

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/

相关文章:

c++ - 为什么在 C++17 中复制初始化需要析构函数并保证移动/复制省略?

c++ - 基于位置的包中的特定类型

c++ - 推导出具有默认模板参数的模板函数指针的模板参数

c++ - getline 不会从变量中读取字符串。 (C++)

c++ - 直接从函数返回类实例的要求?

c++ - 将任意数量的类型插入到一组模板参数中

c++ - vector 中允许的事件迭代器的数量

c++ - 在指针列表上使用迭代器

c++ - 如何在不关闭 fstream 文件的情况下切换它们(同时输出文件)-C++

c++ - 内部编译器错误 - 开关表达式中的模板化转换运算符