如何在此类的定义中为冗长的类名创建别名?我不希望它在类定义之外可访问。我不能让它与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.
};
有任何想法吗?
你不能。构造函数的id-expression,即类定义中构造函数的名称是根据[class.ctor]p1(强调我的):
- 在属于类的成员规范但不是友元声明的成员声明中,id-expression是立即封闭的类的inject-class-name;
什么是注入类名?根据[class]p2
在看到类名后立即将类名插入到作用域中。类名也插入到类本身的范围内;这被称为注入类名。 [...]
因此,inject-class-name是类本身的名称,不能是别名。
[class.ctor]p1的这句话进一步强化了这一点:
类名不应是typedef-name。
如果您甚至不想编写构造函数,请考虑重命名该类,因为该名称过于复杂。