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

How to abbreviate class name inside its own definition?

本文关键字:缩写 定义 自己的      更新时间:2023-10-16

如何在此类的定义中为冗长的类名创建别名?我不希望它在类定义之外可访问。我无法让它与typedefusing一起工作.

在我的情况下,这是一个类模板。

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. 
};

有什么想法吗?

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

  • 在属于类的成员规范但不是友元声明的成员声明中,ID 表达式是紧随其后的类的注入类名;

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

类名

入到在看到类名后立即声明它的作用域中。类名也入到类本身的作用域中;这称为注入的类名。[...]

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

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

名不能是类型定义名

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