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