提问人:yetanotherus3r 提问时间:12/16/2022 最后编辑:yetanotherus3r 更新时间:12/16/2022 访问量:62
嵌套类的模式?[已结束]
Patterns for nested classes? [closed]
问:
我试图解释为什么成员类不像成员函数那样工作。
下面是一个最小的示例:
#include <iostream>
class Base
{
public:
Base ():my_stuff ()
{
};
struct Stuff
{
Stuff ()
{
std::cout << "Base created Stuff" << std::endl;
};
};
Stuff my_stuff;
};
class Derived: Base
{
public:
struct Stuff
{
Stuff ()
{
std::cout << "Derived created Stuff" << std::endl;
};
};
};
int
main ()
{
Base the_base;
Derived the_derived;
return (0);
}
输出:
Base created Stuff
Base created Stuff
与期望输出相比:
Base created Stuff
派生的创建内容
许多类似的示例的工作方式类似,除非我显式重载构造函数。假设我想避免这种情况,就像我的情况一样,因为我有大量的派生类。
我怀疑是否有解决方案,否则编译器可能会允许我编写“虚拟类”作为说明符,这实际上是我的目标。
我承认这听起来可能不合理,但 Python 允许它,我最近进行了切换:)
提前致谢!
编辑:评论指出问题不清楚,所以我再试一次。 相关类 A、B、C 的良好做法(或良好模式)是什么?使用组件 X、Y、Z...分别,但以同样的方式?
以迭代器为例。每个标准容器都实现自己的迭代器。因此,我的期望是存在一个通用的容器祖先,将迭代器的基类作为成员。如果是这样,它是如何完成的?
再次感谢
答:
2赞
Jarod42
12/16/2022
#1
虚拟(内部)类在 C++ 中是不可能的。
模板可能会有所帮助:
template <typename T>
struct Stuff;
template <typename Tag>
class StuffBase
{
Stuff<Tag> my_stuff;
public:
StuffBase() = default;
};
class BaseTag{};
class DerivedTag{};
template <>
struct Stuff<BaseTag>
{
Stuff() { std::cout << "Base created Stuff" << std::endl; }
};
template <>
struct Stuff<DerivedTag>
{
Stuff() { std::cout << "Derived created Stuff" << std::endl; }
};
using Base = StuffBase<BaseTag>;
using Derived = StuffBase<DerivedTag>;
评论
Derived
Base
Base
Derived
Base
Base::Stuff