以下是我的课程:
class Base {
public:
template <typename T>
static struct M {
T* open(string name, Dir *parent = NULL) {
if ( parent ) {
return parent->open_child(name);
} else {
auto ans = new T(name);
ans->open();
return ans;
}
}
};
virtual void open() =0;
};
class Dir : public Base {
public:
template <typename T>
T* open_child(string name);
void open();
};
class File : public Base {
public:
void open();
};
此处,Dir
课程要求Base
原型,Base
要求Dir
。前向声明不起作用:只有适用于继承和方法调用的完整定义。
假设我想将这个代码放入3个头文件:Base.h,Dir.h和File.h.
我如何重新制作代码以打破循环依赖?
答案 0 :(得分:0)
#include <string>
class Dir;
class Base
{
public:
template <typename T>
struct M
{
T* open(std::string name, Dir* parent = nullptr);
};
};
class Dir : public Base
{
// Further definitions
};
// Implementation
template <typename T>
T* Base::M<T>::open(std::string name, Dir* parent)
{
// Implementation goes here...
}