Если у вас есть непрозрачный указатель typedef, есть ли способ динамически ссылаться на указанный тип, скажем, для использования в шаблонах? Например, скажем, у вас есть что-то вроде этого:
struct Foo; // Forward declared struct
typedef Foo* FooPtr; // Opaque pointer
Поскольку типы интеллектуальных указателей являются шаблонами в терминах типа указателя, чтобы определить std::shared_ptr
этого, кажется, что вы должны сказать:
std::shared_ptr<struct Foo> theSharedPtr;
Есть ли способ определить такой указатель без "ручного" разворачивания непрозрачного указателя typedef? Я чувствую, что, должно быть, мне не хватает чего-то очевидного, но вы можете представить что-то подобное (обратите внимание: они не работают):
std::shared_ptr<*FooPtr> theSharedPointer;
// or
std::shared_ptr<pointedto(FooPtr)> theSharedPointer;
Мне кажется, что это должно быть возможно. Я что-то упускаю? Я чувствую, что это надвигающийся момент лба-призрака...
РЕДАКТИРОВАТЬ: Еще несколько раз, но в общем случае shared_ptr<T>
хочет взять sizeof(T)
. Вы можете обойти это, предоставив конструктору конструктор. Я подозреваю, что это делает это немного краевым случаем, но по-прежнему кажется, что со всеми типами конфликтов в С++ я должен "разворачивать" тип указателя, не делая этого вручную.