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,您会看到一个名为 typetypedef,其类型取决于 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