使用 `class` 关键字后跟未声明的标识符

aaf*_*lei 3 c++ templates

以下 hpp 和 cpp 文件摘自我正在使用的一个大型程序。它将与g++ -std=c++17 -pedantic -Wall -Wextra.

// a.hpp

#include <memory>

class A
{
    std::unique_ptr<class A_impl> my;
};
Run Code Online (Sandbox Code Playgroud)
//a.cpp

#include "a.hpp"

int main()
{}
Run Code Online (Sandbox Code Playgroud)

但我不了解有关唯一指针的行上的语法。

问题:

  1. 的语法是<class A_impl>什么?这叫什么(放在class未声明的标识符之前)?它是在做“前向声明”A_impl还是什么?我没有说任何关于 identifier 的内容A_impl。为什么编译器可以接受?

  2. 如果这碰巧可能与任何“设计模式”有关,请帮助我识别它。

请指出正确的方向。

Dan*_*our 6

它是在做“前向声明” A_impl 还是什么?

确切地。可能令人困惑的是,它在模板参数中使用了精心设计的类型说明符来做到这一点。与“正常”前向声明的差异

我没有说任何关于标识符 类型的内容 A_impl。为什么编译器可以接受?

std::unique_ptr 可以用不完整的类型实例化 - 就像原始指针一样。

如果这碰巧可能与任何“设计模式”有关,我如何识别它?

PIMPL - “实现的指针”习语。