Создание QSharedPointer & lt; void & gt;

По историческим причинам я использую QSharedPointer<T> в моем программном обеспечении. В некоторые моменты мы хотим хранить boost::shared_ptr<T> которые указывают на одни и те же данные, и которые должны поддерживать в QSharedPointer<T>,

Обычный способ сделать это — сохранить копию другого умного указателя в boost::shared_ptr<T>, Но для того, чтобы средство удаления не имело разных типов для разных Tс, что помешало бы легко получить QSharedPointer вернуться с boost::get_deleterкогда соответствующий boost::shared_ptr был удручен, я хотел сохранить оригинал QSharedPointer<T> как QSharedPointer<void> внутри средства удаления, в отличие от использования T,

Но я нахожу это QSharedPointer не соответствует задаче, так как выдает ошибки типа «ссылка на void невозможна» при компиляции заголовка.

У кого-нибудь есть идеи о том, как заставить это работать без разоблачения T в удалитель?

6

Решение

Вы не можете определить QSharedPointer, потому что void не является правильным типом. Вы можете определить QSharedPointer и затем привести к и от T * и char * Вот так:

class A {};

QSharedPointer<char> x((char *)new A);
A *ptr = (A *)x.data();

Ужасно, но это работает. Вам также может понадобиться передать Deleter, который корректно удаляет класс в конструкторе, чтобы правильно уничтожить ваш класс.

Лучшей альтернативой было бы использование базового класса.

2

Другие решения


По вопросам рекламы [email protected]