类作为模板参数的前向声明
forward declaration of classes as template arguments
我一直知道,在C++中,只能使用带有引用或指针的前向声明类。为什么我使用下面的正向声明类作为std::vector
的模板参数,在编译过程中不会有任何问题?
感谢
AFG-
// MyFile.hpp
class OutClass{
public:
class InnClass;
OutClass();
void print();
// why this doesn't create compile time
std::vector< InnClass > m_data;
};
// MyFile.cpp
class OutClass::InnClass{
public:
InnClass() : m_ciao(0) {}
int m_data;
};
OutClass::OutClass()
: m_data(){
InnClass a, b;
a.m_ciao=1; b.m_ciao=2;
m_data.push_back( a );
m_data.push_back( b );
}
void OutClass::print(){
std::cout << m_data[0].m_ciao << std::endl;
std::cout << m_data[1].m_ciao << std::endl;
}
int main( int argc, char** argv ){
OutClass outObj;
outObj.print();
return 0;
}
因为std::vector
在您的平台上的具体实现可能不需要T
是完整类型。对于vector
来说,这相对容易做到,因为它基本上只由指针组成,因此如果操作得当,不需要完整的类型。然而,对于std::vector
,标准要求T
是完全类型。所以,不要依赖它。
相关文章:
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- 对可变参数使用声明.如何选择正确的功能
- Arduino C++在构造函数中用参数声明对象数组
- 标准::向量声明中使用的模板参数
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 构造函数/函数声明参数列表中的统一初始化
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 带参数的数据结构的全局声明
- C++使用默认模板参数键入别名和转发声明
- 警告:忽略模板参数上的属性..在 std::unique_ptr (-wignore 属性)的声明中
- C++声明模板参数阴影模板参数错误
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 如何使用参数声明实例?
- 采用nulltpr_t的构造函数:函数定义不声明参数
- c++ 函数定义不声明参数
- 在循环范围之外声明参数是否更有效?
- 在linux下使用mingw交叉编译器声明"参数"中的两种或多种数据类型
- Clang Format多行函数声明参数问题
- 氧-声明参数为可选的