![](/img/trans.png)
[英]Use a forward-declared class in a virtual function in a template baseclass where the constructor only needs the forward declare?
[英]Forward Declare instance of Template Class with Virtual Functions
我已经在mynamespace
创建了模板类A<T>
,我需要对其进行转发声明以在mynamespace2
类B
中mynamespace2
。 是否可以转发声明A
的特定实例供B
使用,即A<int>
?
档案:啊
#include "b.h"
namespace mynamespace{
template <class T>
class A{
A(T); // constructor
mynamespace2::B* b_attribute;
};
}
档案:bh
/* 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
任何地方引用A
请注意,在使用using
模板之前,您仍然必须在另一个名称空间中向前声明模板。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.