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

问题描述

给定以下代码

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 (将#修改为@)