Abr*_*ile 5 c++ templates forward-declaration
我一直都知道在 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;
}
Run Code Online (Sandbox Code Playgroud)
因为也许你的平台上的具体实现std::vector并不需要T是一个完整的类型。对于 a 来说,这相对容易做到vector,因为它基本上只包含指针,因此如果做得正确,不需要完整的类型。然而,据我所知,该标准要求T是一个完整的类型std::vector。所以,不要依赖它。
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |