替代 operator()() 重载? ||直接会员访问

Alternative to operator()() overloading? || Direct member access

我想将 C 类型包装到 CPP class 中以获得更好的内存处理。例如,下面的代码片段大致显示了我想做的事情:


class TJCompressor
{
public:
    TJCompressor()
        : m_tjInstance(tjInitCompress())
    {
        if (m_tjInstance == nullptr)
            throw std::runtime_error("Could not create a TJ compressor instance");
    }
    ~TJInstance()
    {
        tjDestroy(m_tjInstance);
    }

    const tjhandle& operator()() const
    {
        return m_tjInstance;
    }

private:
    tjhandle m_tjInstance = nullptr;
};

但是,现在我需要通过 operator()() 访问实际的 tjhandle,我希望摆脱它。

TJCompressor compressor;
tjDecompressHeader3(decompressor(), ... );  // works as expected
tjDecompressHeader3(decompressor, ... );    // preferred way of doing it

我很确定这是可以实现的,但不知何故我找不到任何关于如何做到这一点的信息。

我想你想要的是一个转换运算符....看起来像

operator const tjhandle & () const { return m_tjInstance; }

然后您将能够调用您的函数

tjDecompressHeader3(decompressor, ...)

可在此处找到更多信息: https://en.cppreference.com/w/cpp/language/cast_operator