【问题标题】:Alternative to operator()() overloading? || Direct member access替代 operator()() 重载? ||直接会员访问
【发布时间】:2020-04-07 10:25:49
【问题描述】:

我想将 C 类型包装到 CPP 类中,以便更好地处理内存。例如下面的代码 sn-p 大致显示了我想做的事情:


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

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

【问题讨论】:

  • 小心或 3/5/0 规则。可以使用带有适当删除器的 std::unique_ptr`。
  • 将函数也封装在类中而不暴露 C 类会更好吗?

标签: c++ operator-keyword raii conversion-operator


【解决方案1】:

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

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

然后你就可以调用你的函数了

tjDecompressHeader3(decompressor, ...)

更多信息可以在这里找到: https://en.cppreference.com/w/cpp/language/cast_operator

【讨论】:

  • 是的!这正是我一直在寻找的。太好了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2015-02-25
相关资源
最近更新 更多