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