C++模板和指向不完整类型的指针
C++ templates and pointers to incomplete types
编译器如何知道obj
是什么样子的?它不包含在form.h
中,但无论如何它都可以工作。
表格.h
#ifndef FORM_H
#define FORM_H
template <class T>
class Form
{
public:
Form(T* obj) {}
};
#endif // FORM_H
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
form = new Form<MainWindow>(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
编译器
知道obj
是什么样子的,因为作为一个T*
,obj
是一个指针,编译器非常清楚所有指针的样子。
它不需要知道T
长什么样,就可以处理T*
。
如果要取消引用该指针并在类定义中使用它指向的T
,那么是的,T
的定义必须可用。但无论如何,这都是肯定的,因为任何实例化Form<T>
的代码都必须至少已经知道所选T
是一个类。除此之外,所有关于前瞻性申报的常规规则都适用。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值