Вероятно, это можно обобщить для любого шаблонного класса, но я столкнулся с этим с shared_ptr.У меня есть система классов, которая выглядит следующим образом:
class A {
protected:
// some data
}
class B : public A {
// some access functions
}
class C : public A {
// some other access functions
}
Я использую эту концепцию, потому что в моей библиотеке я использую набор функций, которые не должны быть представлены пользователю, поэтому я делю эти функции на двеинтерфейсные классы.Теперь я знаю, что могу использовать один класс и друзей, но это будет ужасно, если для доступа к этим функциям потребуется более одного класса.
Однако у меня проблема в том, что эти классы передаются вокруг в shared_ptr
, и янеобходимо сохранить счетчик ссылок (поскольку данные будут уничтожены).Поэтому мне нужно конвертировать в этом примере shared_ptr<B>
в shared_ptr<C>
и наоборот.shared_ptr
Позволяет ли это, если необходимые функции предоставляются и если да, то что это?Конструктор?Назначить оператора?Или мне нужно подняться на уровень выше и разыгрывать целые указатели, а не просто контент?Мне пока не повезло.
И да, если у вас есть лучший / более аккуратный способ скрытия определенных функций, я буду рад это услышать, но я бы тоже хотел получить ответ на этот вопрос.