how*_*rks 11 c++ class std forward-declaration
如果我有一个不需要在.hpp文件中完整定义的类,我通常主要使用前向声明
例)
//B.hpp
namespace A_file {
class A;
}
namespace B_file {
class B {
public:
B();
private:
A *ptr_to_A;
}
}
//B.cpp
#include "A.hpp"
using namespace A_file;
namespace B_file {
B(int value_) {
*ptr_to_A = new A(value_);
}
int some_func() {
ptr_to_A->some_func_in_A();
}
}
Run Code Online (Sandbox Code Playgroud)
我写这种代码.我想,它将再次包括整个hpp.(随意评论,如果你的事情,这是不健康的)
有没有办法可以对std命名空间中的对象/类做同样的事情?如果有办法,可以,还是有副作用?
Joh*_*nPS 22
您可以在头文件中转发声明自己的类以节省编译时间.但你不能在命名空间std中的类.根据C++ 11标准,17.6.4.2.1:
如果C++程序向命名空间std或命名空间std中的命名空间添加声明或定义,则它是未定义的,除非另有说明.
请注意,其中一些类是模板化类的typedef,因此简单的前向声明将不起作用.您可以使用#include<iosfwd>
,而不是#include<iostream>
例如,但也有只是前锋的声明没有类似的标题string
,vector
等等.
有关更多信息,请参阅GotW#34,前向声明.
归档时间: |
|
查看次数: |
4543 次 |
最近记录: |