C+中嵌套类型/类的前向声明我最近陷入了这样的境地:class A{public:
typedef struct/class {...} B;...
C::D *someField;}class C{public:
typedef struct/class {...} D;...
A::B *someField;}通常您可以声明一个类名:class A;但是您不能转发声明嵌套类型,以下情况会导致编译错误。class C::D;有什么想法吗?
3 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
class IDontControl{ class Nested { Nested(int i); };};
class IDontControl::Nested; // But this doesn't work.
class IDontControl_Nested; // Forward reference to distinct name.
#include <idontcontrol.h>// I defined the forward ref like this:class IDontControl_Nested : public IDontControl::Nested{ // Needed to make a forwarding constructor here IDontControl_Nested(int i) : Nested(i) { }};
ABOUTYOU
TA贡献1812条经验 获得超5个赞
HPP档案:
class MyClass{public: template<typename ThrowAway> void doesStuff();};
CPP文件
#include "MyClass.hpp"#include "Annoying-3rd-party.hpp"template<> void MyClass::doesStuff<This::Is::An::Embedded::Type>(){ // ...}
您必须在调用时指定嵌入式类型(特别是如果您的函数不接受嵌入式类型的任何参数) 您的函数不能是虚拟的(因为它是一个模板)
- 3 回答
- 0 关注
- 335 浏览
添加回答
举报
0/150
提交
取消