微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

继承基于模板的赋值运算符

如何解决继承基于模板的赋值运算符

给定以下代码

template <typename T,T DefaultValue>
class CObjectManager
{
private:
    T m_Object;

public:
    CObjectManager(const T object = DefaultValue)
    {
        m_Object = DefaultValue;
    }

    ~CObjectManager()
    {
        DeleteObject();
    }

    T GetValue()
    {
        return m_Object;
    }

    void operator =(const T object)
    {
        DeleteObject();
        m_Object = object;
    }

protected:
    void DeleteObject()
    {
        if (m_Object != DefaultValue)
        {
            FreeObject(m_Object);
            m_Object = DefaultValue;
        }
    }

    virtual void FreeObject(T object) = 0;
};

class CBCryptAlgorithmProviderManager : public CObjectManager<BCRYPT_ALG_HANDLE,NULL>
{
    void FreeObject(BCRYPT_ALG_HANDLE object)
    {
        ::BCryptCloseAlgorithmProvider(object,0);
    }
};

我希望以下内容有效。

BCRYPT_ALG_HANDLE hAlgorithm;

status = BCryptOpenAlgorithmProvider(&hAlgorithm,BCRYPT_AES_ALGORITHM,NULL,0);
if (status != STATUS_SUCCESS)
    throw new CEncryptionException(status,_T("Unable to open encryption provider."));

provider = hAlgorithm;

但最后一行报错:

没有运算符“=”匹配这些操作数:操作数类型为 CBCryptAlgorithmProviderManager = BCRYPT_ALG_HANDLE

这可能是我的愚蠢之处。但这不应该奏效吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。