如何在自己的定义中缩写类名?
How to abbreviate class name inside its own definition?
如何在此类的定义中为冗长的类名创建别名?我不希望它在类定义之外可访问。我无法让它与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 表达式,即类定义中构造函数的名称根据 [class.ctor]p1(强调我的):
- 在属于类的成员规范但不是友元声明的成员声明中,ID 表达式是紧随其后的类的注入类名;
什么是注入类名?根据 [类]p2
类名入到在看到类名后立即声明它的作用域中。类名也入到类本身的作用域中;这称为注入的类名。[...]
因此,注入的类名是类本身的名称,不能是别名。
[class.ctor]p1中的这句话进一步强化了这一点:
类名不能是类型定义名。
如果您甚至不想编写构造函数,请考虑重命名类,因为名称太复杂了。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 如何在自己的定义中缩写类名?
- 缩写类中定义的类型的全名