[英]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
来说相对容易,因为它基本上只由指针组成,因此如果正确完成则不需要完整的类型。 然而,afaik标准要求T
是std::vector
的完整类型 。 所以,不要依赖于此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.