我正在尝试为在内存“ membuf”上运行的“编解码器”层次结构定义父类-这些编解码器中的某些纯粹是功能性的,但有些需要具有(非本地)副作用,例如在某处的某个字节中设置一个位(以下为“ flags”)。因此,我想有2个父类,基本上是一个具有成员flag_type*的父类,一个没有成员的,我想保存flag_type*的8个字节-我试图定义第二个基类,没有模板参数,没有成员flag_type*,但是没有用。任何想法?

template <typename flag_type =void>
class Codec
{
  public:
    Codec(flag_type* flags =nullptr)
    : _mem(graph.mem()), _flags(flags)
  {}

  protected:
    membuf& _mem;
    flag_type* _flags;
};

最佳答案

您必须进行专业化,例如:

struct no_tag{}; // Used to specify no flag type

template <typename flag_type =void>
class Codec
{
  public:
    Codec(flag_type* flags =nullptr)
    : _mem(graph.mem()), _flags(flags)
  {}

  protected:
    membuf& _mem;
    flag_type* _flags;
};


template <>
class Codec<no_tag>
{
  public:
    Codec() : _mem(graph.mem()) {}

  protected:
    membuf& _mem;
};

10-07 13:37