替代 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
我想将 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