C++基于上下文的类实现
C++ Context-Based Class Implementation
在
C++中是否有可能有一个class
,其定义取决于其构造的上下文?
例如,具有多个构造函数的class A
是否可以继承对特定构造函数的调用class B
,而从对不同构造函数的调用之后的class C
继承?
如果没有,为什么?如果是这样,这将如何实现?
不,这在动态上是不可能的。
如果A继承自B,它应该是某种B("is-a"关系(。此关系代表类 A 的所有对象,与上下文无关。
你有时想从B继承,有时从C继承,这表明你正在考虑一种"has-a"关系。 这将通过组合来实现:
class B;
class C;
class A {
B *hasB; // of course in real lif you'd use unique_ptr or shared_ptr...
C *hasC;
public:
A(B *b); // would set hasB but set hasC to nullptr.
A(C *c); // would set hasC but set hasB to nullptr.
...
};
如果你的问题不是动态处理,而只是在编译时处理,你可以想到模板:
template <class T>
class A : public T {
...
};
A<B> ab; // A<B> inherits from B
A<C> ac; // A<C> inherits from C
// but attention: both class are two different classes.
是的。但不是以你明确提议的方式。继承独立于构造函数 - 因此您无法以这种方式实现这种"特定于上下文"的行为。
这里有几个选项(请注意,还有更多方法可以做到这一点(:
一个相对简单的方法,特别是如果你想隐藏你的类 A 具有类 B 或 C 的特征,是从 B 和 C 私下继承。然后在构造函数中设置一个标志,告诉类使用 B 中的功能或 C 中的功能。然后,所有 A 类方法只需检查该参数并调用相应的 B 或 C 方法。
或者,您可以使用模板。访客模式作为一种基于模板的方法浮现在脑海中,它完成了您似乎描述的内容。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- #为""定义宏;静态";针对不同的上下文
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 与互斥锁相比,旋转锁可以保证上下文切换
- 使用简单类型列表实现的指数编译时间.为什么
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如何在BST的这个简单递归实现中消除警告
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 实现上下文切换 - 第二个函数不再运行
- 根据getcontext和setcontext实现交换上下文
- C++基于上下文的类实现