c ++声明中的::type是什么意思?
What does ::type in c++ declaration mean?
以下代码取自 cpp-netlib,但我在其他地方看到过类似的声明。
template <class Handler>
struct server : server_base<tags::http_server, Handler>::type
{
typedef typename server_base<tags::http_server, Handler>::type server_base;
typedef server_options<tags::http_server, Handler> options;
explicit server(options const &options) : server_base(options) {}
};
请有人解释一下在声明中使用 ::type
的意义是什么。在搜索框中使用 'type' 一词进行搜索会抛出太多不相关的结果,无法找到答案。
TIA
它可能是模板化 class/struct 中定义某种类型的 typedef。为了看到它到底是什么,要么查看 sever_base 模板定义,要么如果使用 Visual Studio 只需将鼠标悬停在类型上 - 它应该将基础类型显示为工具提示
这是一种解决方法,因为 C++98(以及 C++03)不允许模板类型定义。
如果查看 server_base class,您会看到一个名为 type
的 typedef
,其类型取决于 server_base 的模板参数。仅供参考,在 C++11 中,您可以使用别名声明。参见 C++ template typedef
大多数时候,它是一种用于简化为 access/expose 内部类型的工具。无需编写模板的长声明 class,您只需通过 ::type
访问类型即可。
这种方式在C++标准库中被广泛使用,例如std::integral_constant
:
#include <type_traits>
typedef std::integral_constant<int, 2> two_t;
two_t::type my_constant; // <--- simplified
以下代码取自 cpp-netlib,但我在其他地方看到过类似的声明。
template <class Handler>
struct server : server_base<tags::http_server, Handler>::type
{
typedef typename server_base<tags::http_server, Handler>::type server_base;
typedef server_options<tags::http_server, Handler> options;
explicit server(options const &options) : server_base(options) {}
};
请有人解释一下在声明中使用 ::type
的意义是什么。在搜索框中使用 'type' 一词进行搜索会抛出太多不相关的结果,无法找到答案。
TIA
它可能是模板化 class/struct 中定义某种类型的 typedef。为了看到它到底是什么,要么查看 sever_base 模板定义,要么如果使用 Visual Studio 只需将鼠标悬停在类型上 - 它应该将基础类型显示为工具提示
这是一种解决方法,因为 C++98(以及 C++03)不允许模板类型定义。
如果查看 server_base class,您会看到一个名为 type
的 typedef
,其类型取决于 server_base 的模板参数。仅供参考,在 C++11 中,您可以使用别名声明。参见 C++ template typedef
大多数时候,它是一种用于简化为 access/expose 内部类型的工具。无需编写模板的长声明 class,您只需通过 ::type
访问类型即可。
这种方式在C++标准库中被广泛使用,例如std::integral_constant
:
#include <type_traits>
typedef std::integral_constant<int, 2> two_t;
two_t::type my_constant; // <--- simplified