c++ - 我可以通过这个类的实例访问一个类的成员类型吗?
问题描述
我不知道为什么,我确信在 C++ 中,如果在类或结构中声明类型别名(通过using
或),如下所示:typedef
class klasa
{
public:
using typ = int;
};
那么这种类型不仅可以通过类名访问,如这里:klasa::typ
,还可以通过这个类的实例,使用点运算符,如这里:klasa k; k.typ
。
显然,我弄错了。我尝试:
class klasa
{
public:
using typ = int;
};
int main()
{
klasa k;
k.typ i = 0;
return 0;
}
编译器抱怨:
ffs.cc: In function ‘int main()’:
ffs.cc:10:7: error: invalid use of ‘using typ = int’
k.typ i = 0;
^
如果我替换为,我只能让编译器关闭k.typ i = 0;
:
decltype(k)::typ i = 0;
因此我的问题。我是否完全梦想通过此类的实例访问类成员类型的可能性,因为访问类的成员类型的唯一方法是通过类本身而不是通过此类的对象?还是真的可以通过此类的实例访问类的成员类型,只有一个必须以与简单的点运算符不同的方式来执行此操作,而我忘记了如何正确执行此操作?
解决方案
我是否完全梦想通过此类的实例访问类成员类型的可能性,因为访问类的成员类型的唯一方法是通过类本身而不是通过此类的对象?还是真的可以通过此类的实例访问类的成员类型,只有一个必须以与简单的点运算符不同的方式来执行此操作,而我忘记了如何正确执行此操作?
是前者。该语言的语法不允许需要类型的表达式。您需要使用decltype
来获取表达式的类型。
也许您已经将此与静态成员或枚举器混淆了,它们可以使用className::
和objectName.
语法来访问。
推荐阅读
- java - 使用递归方法在java中返回一个中序字符串?
- javascript - 更新 Flash 内容 src 标签以换出动画
- css - React Fontawesome CSS 伪元素不在 div 内呈现,但在 Codepen 中工作
- python - 如何在python中加入或合并
- python - 有更好的方法来编写列表理解吗?
- asynchronous - 当未来包装它被丢弃时,如何停止运行同步代码?
- sql - 查询使用 CASE WHEN 嵌套 AND 和 OR 函数
- javascript - 如何使用 JavaScript/jQuery 将多个键值对保存到一个 cookie?
- python - 使用 Simulink TCP/IP 发送块向远程机器发送连续数据
- python - 如何在 Python 中将继承与模拟 autospec 结合起来