我创建了一个模板类 A<T>
在mynamespace
我需要转发声明在类中使用 B
在mynamespace2
.是否可以转发声明 A
的特定实例用于 B
, 即 A<int>
?
文件:a.h
#include "b.h"
namespace mynamespace{
template <class T>
class A{
A(T); // constructor
mynamespace2::B* b_attribute;
};
}
文件:b.h
/* How to forward declare A<int>? This doesn't work:
*
* namespace mynamespace{
* class A<int>;
* }
*
* neither does this:
*
* namespace mynamespace{
* template <class T>
* class A<T>
* }
*/
namespace mynamespace2{
class B{
B();
mynamespace::A<int>* a_attribute; // for use over here
virtual void f(A<int>*); // note: virtual function
};
}
感谢任何帮助。
最佳答案
这与前向声明任何其他内容没有什么不同,只是您必须正确获取命名空间:
namespace mynamespace{
template <class T> class A;
}
A
是在 mynamespace
中声明的,因此您必须这样指定它。
如果你真的想避免每次都显式指定命名空间,添加一个using
声明:
namespace mynamespace2{
using mynamespace::A;
class B{
B();
A<int>* a_attribute; // for use over here
};
}
一旦声明了using
,您就可以在mynamespace2
中的任何地方引用A
。
请注意,在使用 using
将其拉入之前,您仍然必须在其他命名空间中转发声明模板。
关于c++ - 使用虚函数转发声明模板类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50078466/