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

问题描述 投票:1回答:1

如何在此类的定义中为冗长的类名创建别名?我不希望它在类定义之外可访问。我不能让它与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. 
};

有任何想法吗?

c++ class typedef using
1个回答
2
投票

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

  • 在属于类的成员规范但不是友元声明的成员声明中,id-expression是立即封闭的类的inject-class-name;

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

在看到类名后立即将类名插入到作用域中。类名也插入到类本身的范围内;这被称为注入类名。 [...]

因此,inject-class-name是类本身的名称,不能是别名。

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

类名不应是typedef-name。

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

© www.soinside.com 2019 - 2024. All rights reserved.