我在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
};
}
我感谢任何帮助。
答案 0 :(得分:1)
这与向前声明其他任何内容没有什么不同,除了你必须正确命名空间:
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
声明之后,您可以在A
内的任何地方引用mynamespace2
。
请注意,在使用using
提取模板之前,您仍必须在其他命名空间中向前声明模板。