首页 > 解决方案 > 我可以通过这个类的实例访问一个类的成员类型吗?

问题描述

我不知道为什么,我确信在 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;

因此我的问题。我是否完全梦想通过此类的实例访问类成员类型的可能性,因为访问类的成员类型的唯一方法是通过类本身而不是通过此类的对象?还是真的可以通过此类的实例访问类的成员类型,只有一个必须以与简单的点运算符不同的方式来执行此操作,而我忘记了如何正确执行此操作?

标签: c++classtypes

解决方案


我是否完全梦想通过此类的实例访问类成员类型的可能性,因为访问类的成员类型的唯一方法是通过类本身而不是通过此类的对象?还是真的可以通过此类的实例访问类的成员类型,只有一个必须以与简单的点运算符不同的方式来执行此操作,而我忘记了如何正确执行此操作?

是前者。该语言的语法不允许需要类型的表达式。您需要使用decltype来获取表达式的类型。

也许您已经将此与静态成员或枚举器混淆了,它们可以使用className::objectName.语法来访问。


推荐阅读