代码之家  ›  专栏  ›  技术社区  ›  Jersey

如何在自己的定义中缩写类名?

  •  1
  • Jersey  · 技术社区  · 7 年前

    如何在此类的定义中为冗长的类名创建别名?我不想在类定义之外访问它。我也不能让它工作 typedef using .

    在我的例子中,这是一个类模板。

    template<typename T>
    class detailed_class_name{
    
    typedef detailed_class_name<T> foo; // either one 
    using foo = detailed_class_name<T>; // of these 
    
    public:
        foo(); // Error: ISO C++ forbids declaration of 'foo' with no type. 
    };
    

    有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Rakete1111    7 年前

    你不能。构造函数的 id表达式 ,即类定义中构造函数的名称根据 [class.ctor]p1 (重点矿山):

    • 在一个 成员声明 属于 构件规范 但不是朋友声明, 这个 id表达式 是直接封闭类的注入类名 ;

    什么是注入的类名?根据 [class]p2

    A. 类别名称 插入到其声明的作用域中 类别名称 已看到。 这个 类别名称 也被插入到类本身的范围中;这就是注入的类名 . [...]

    因此,注入的类名是类本身的名称,不能是别名。

    中的这句话进一步加强了这一点 [class.ctor]p1 :

    这个 类别名称 不应为 类型定义名 .

    如果您甚至不想编写构造函数,因为名称太复杂,请考虑重命名该类。