使用虚函数转发声明模板 Class 的实例
Forward Declare instance of Template Class with Virtual Functions
我在 mynamespace
中创建了一个模板 class A<T>
,我需要转发声明以在 class 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
.
将其拉入之前,您仍然必须在其他命名空间中转发声明模板。
我在 mynamespace
中创建了一个模板 class A<T>
,我需要转发声明以在 class 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
.