我有以下类:
class Foo{
}
class Bar{
public:
using meth = Foo* (*)(int a, std::string b);
}
有人能解释一下这条线的意思吗:
using meth = Foo* (*)(int a, std::string b);
在我看来,这是一种存储指向构造函数或其他东西的指针的方法。如果有人能解释,我将不胜感激。
请随意编辑问题本身,使其更具描述性——如果我知道这段代码的作用,我就不会问这个问题。
行
using meth = Foo* (*)(int a, std::string b);
使meth
成为冗长的函数指针类型声明的简写(类型别名)。
它可以像这样使用:
Foo* bar(int a, std::string b);
meth baz = bar;
在这种情况下,它只是创建类型别名的一种新形式,就像使用typedef
一样。它说类型别名meth
是指向函数的指针,该函数采用int
和std::string
参数,并返回指向Foo
的指针。然后,您可以使用它来声明变量,例如
meth walter;
然后,您可以像其他任何变量一样为变量walter
赋值。
类型别名存储在编译器的内存中,它不会写入对象或可执行文件,它只是由编译器使用和内部使用。
应该注意的是,与C++中的许多其他东西一样,上下文很重要,关键字using
在不同的上下文中可以做不同的事情。
它可以用于创建类型别名(如问题中所述),可以用于创建名称空间别名,可以用于将符号从一个作用域拉入另一作用域(不幸的是,最常见的是)将所有符号从std
名称空间拉入全局作用域)。