优化掉未使用的参数化字段

时间:2015-08-28 21:43:48

标签: c++ templates c++11

我正在尝试为内存“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;
};

1 个答案:

答案 0 :(得分:1)

你必须做专业化,比如:

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;
};
相关问题