c++ 嵌套类的模式?[已关闭]

x8diyxa7  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(107)

3天前关闭。
Improve this question
我寻求一个解释,为什么成员类不像成员函数那样工作。
下面是一个简单的例子:

#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);
}

输出:
基地创建的东西
基地创建的东西
与所需输出:
基地创建的东西
派生创建的内容
许多类似的例子都是类似的,除非我显式地重载了构造函数。假设我想避免这种情况,就像我的例子一样,因为我有大量的派生类。
我怀疑是否有解决方案,否则编译器可能会允许我编写"虚类"作为说明符,这实际上是我的目标。
我承认这听起来可能不合理,但Python允许这样做,我最近做了转换:)
先谢了!
编辑:评论指出这个问题并不清楚,所以我会再试一次。对于相关的类A,B,C ......分别使用组件X,Y,Z ......,但以相同的方式使用,什么被认为是好的实践(或好的模式)?
以迭代器为例。每个标准容器实现自己的迭代器。因此,我期望存在一个公共容器祖先,将迭代器的基类作为成员。如果是这样,它是如何实现的?
再次感谢

mzillmmw

mzillmmw1#

虚(内部)类在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>;

Demo

相关问题