我可以通过这个类的实例访问类的成员类型吗?

时间:2018-05-01 14:19:13

标签: c++ class types

我不知道为什么,我确信,在C ++中,如果在类或结构中声明类型别名(通过usingtypedef),就像这里:

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;

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

1 个答案:

答案 0 :(得分:2)

  

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

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

也许您已将此与静态成员或枚举数混淆,可以使用className::objectName.语法进行访问。