Альтернатива перегрузке operator () ()? || Прямой доступ участника - PullRequest
0 голосов
/ 07 апреля 2020

Я бы хотел обернуть C типов в класс CPP для лучшей обработки памяти. Например, приведенный ниже фрагмент кода примерно показывает, что я хотел бы сделать:


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;
};

Однако теперь мне нужно получить доступ к фактическому tjhandle через operator()(), и я бы предпочел избавиться от этого.

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

Я почти уверен, что это достижимо, но я почему-то не могу найти ничего о том, как это сделать.

1 Ответ

3 голосов
/ 07 апреля 2020

То, что вы хотите, я думаю, это оператор преобразования .... что-то похожее на

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

, тогда вы сможете вызывать свою функцию как

tjDecompressHeader3(decompressor, ...)

Дополнительная информация можно найти здесь: https://en.cppreference.com/w/cpp/language/cast_operator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...