在这种情况下 "using" 正在做什么,正在存储什么?
What is "using" doing in this instance, and what is being stored?
我有以下 class:
class Foo{
}
class Bar{
public:
using meth = Foo* (*)(int a, std::string b);
}
谁能解释一下这行的意思:
using meth = Foo* (*)(int a, std::string b);
在我看来,这是一种存储指向构造函数或其他内容的指针的方法。如果有人能解释一下,我将不胜感激。
请随意编辑问题本身以使其更具描述性 - 如果我知道这段代码的作用,我就不会问这个问题。
在那种情况下,它只是一种创建类型别名的新形式,就像使用 typedef
一样。它表示类型别名 meth
是一个指向函数的指针,该函数接受一个 int
和一个 std::string
参数并返回一个指向 Foo
的指针。然后您可以使用它来声明变量,例如
meth walter;
然后您可以像任何其他变量一样分配给变量 walter
。
类型别名存储在编译器的内存中,它不会写入对象或可执行文件,它仅供编译器使用并在编译器内部使用。
应该注意的是,与 C++ 中的许多其他事物一样,上下文很重要,关键字 using
可以在不同的上下文中做不同的事情。
它可用于创建类型别名(如问题中所述),可用于创建名称空间别名,可用于将符号从一个范围拉入另一个范围(最常见的是,不幸的是)将所有符号从 std
命名空间拉入全局范围)。
行
using meth = Foo* (*)(int a, std::string b);
使 meth
成为冗长的函数指针类型声明的 shorthand(类型别名)。
它可以像这样使用:
Foo* bar(int a, std::string b);
meth baz = bar;
我有以下 class:
class Foo{
}
class Bar{
public:
using meth = Foo* (*)(int a, std::string b);
}
谁能解释一下这行的意思:
using meth = Foo* (*)(int a, std::string b);
在我看来,这是一种存储指向构造函数或其他内容的指针的方法。如果有人能解释一下,我将不胜感激。
请随意编辑问题本身以使其更具描述性 - 如果我知道这段代码的作用,我就不会问这个问题。
在那种情况下,它只是一种创建类型别名的新形式,就像使用 typedef
一样。它表示类型别名 meth
是一个指向函数的指针,该函数接受一个 int
和一个 std::string
参数并返回一个指向 Foo
的指针。然后您可以使用它来声明变量,例如
meth walter;
然后您可以像任何其他变量一样分配给变量 walter
。
类型别名存储在编译器的内存中,它不会写入对象或可执行文件,它仅供编译器使用并在编译器内部使用。
应该注意的是,与 C++ 中的许多其他事物一样,上下文很重要,关键字 using
可以在不同的上下文中做不同的事情。
它可用于创建类型别名(如问题中所述),可用于创建名称空间别名,可用于将符号从一个范围拉入另一个范围(最常见的是,不幸的是)将所有符号从 std
命名空间拉入全局范围)。
行
using meth = Foo* (*)(int a, std::string b);
使 meth
成为冗长的函数指针类型声明的 shorthand(类型别名)。
它可以像这样使用:
Foo* bar(int a, std::string b);
meth baz = bar;