返回自身内部的双重嵌套类的成员函数,该类继承自从自身继承的类
Member function that returns a doubly-nested class inside itself which inherited from a class inherited from itself
>假设我有 3 个具有以下拓扑结构的类,实际代码是这样的:
// formal system.h
#pragma once
namespace nianyi {
class Proposition {
public:
class Term;
class Expression;
// Term::Value evaluate();
};
class Proposition::Term : public Proposition {
public:
class Variable;
class Value;
};
class Proposition::Term::Value : public Proposition::Term {
};
};
很容易看出,如果我取消注释该函数声明,编译器将抱怨未预先定义的类 Value,事实上它确实如此:
error C2027: use of undefined type 'nianyi::Proposition::Term'
但另一方面,类Term
派生自其基类Proposition
,这意味着我不能将其实现放在基类中,因为在实现结束之前它不是一个完整的类,并且不能派生不完整的类。
因此,将类Term
的实现放在类Proposition
的内部和外部都会导致编译器错误。内部一个是由基类的不完备性引起的,外部一个是由导数的不完备性引起的。
那么......解决这个问题的最佳方法是什么?
附言请停止告诉"你应该在使用类之前完成定义"或"只是不要让它们嵌套"。 对于第一个词,这就是整个问题,简单地告诉这个并没有多大帮助; 对于第二种词,我只是打算将它们嵌套起来,以免暴露这些细节。
这应该有效,不清楚它是否是你想要的
class Proposition {
public:
};
class Term : public Proposition {
public:
class Variable {};
class Value {};
};
class Value : public Term {
};
这是一个抽象的解决方案。 无需继承。
class Variable{
};
class Value{
};
class Term{
class Variable;
class Value;
};
class Expression{
class Variable;
class Value;
};
class Proposition{
class Expression;
class Term;
};
似乎没有人在你的问题标题中谈到返回一个"自我内部的双重嵌套类"的观点。 我最近看到通过创建类的私有(或公共,如果您愿意(成员和类的指针实例来完成了很多工作。这样,您可以生成指向此成员的类并返回指针。
// formal system.h
#pragma once
namespace nianyi {
class Proposition {
public:
class Term;
class Expression;
// Term::Value evaluate();
Proposition( )
{
Proposition *pinstance;
prop_ = pinstance;
}
private:
Proposition *prop_;
};
class Proposition::Term : public Proposition {
public:
class Variable;
class Value;
};
class Proposition::Term::Value : public Proposition::Term {
};
};
相关文章:
- 继承函数的重载解析
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 派生类调用使用非继承成员的继承函数
- 继承函数是否适用于 C++ 中的基类元素或派生类元素?
- 在链表中的某个点插入时出现问题,C++中的继承函数
- std :: is_same-来自integral_constant的继承函数的用例
- 如何将同名的继承函数视为重载函数
- 使用子函数的继承函数
- 执行覆盖的继承函数
- 相对于更专业的继承函数,模板更喜欢子类函数
- C++:继承函数并重新定义它们
- C++ 继承函数指针,可与派生方法一起使用
- 不同对象的向量,对象具有非继承函数
- C++多级继承函数调用
- 基类指向派生类继承函数调用的指针
- C++继承函数覆盖
- 派生类是否C++必须在头文件中包含继承函数/成员的定义
- 继承函数中的参数消失
- C++通过继承函数实现继承的抽象函数
- 构造函数和继承函数 c++