假设我有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
会导致编译器错误。内部的一个是由基类的不完整引起的,而外部的一个是由导数的不完整引起的。
那么......解决这个问题的最佳方法是什么?
P.S。请停止告诉“你应该在使用类之前完成定义”或“只是不要让它们嵌套”。 对于第一个单词,这就是那里的整个问题,简单地告诉它并没有多大帮助; 而对于第二种话,我只是想让它们嵌套而不是暴露这些细节。
答案 0 :(得分:0)
这应该有效,但不清楚它是否是你想要的
server {
server_name abc.com;
location / {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://node;
}
}
upstream node {
server 127.0.0.1:8000;
}
答案 1 :(得分:0)
这是一个抽象的解决方案。 不需要继承。
class Variable{
};
class Value{
};
class Term{
class Variable;
class Value;
};
class Expression{
class Variable;
class Value;
};
class Proposition{
class Expression;
class Term;
};
答案 2 :(得分:0)
似乎没有人在你的问题标题中谈到关于在其自身内部返回“双重嵌套类”的问题。 我最近通过创建类的一个私有(或公共,如果你喜欢)成员和类的指针实例看到了这一点。这样,您就可以生成并向该成员返回指向该类的指针。
// 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 {
};
};