繁体   English   中英

将类的前向声明作为模板参数

[英]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标准要求Tstd::vector完整类型 所以,不要依赖于此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM