Я строю библиотеку C++. У меня есть struct
, который содержит std::unique_ptr
другому struct
, который я хотел бы скрыть от пользователя.Могу ли я опустить аргументы типа интеллектуальных указателей в своих заголовочных файлах?
Например:
struct MyStruct {
int x;
private:
std::unique_ptr<MyPrivateStruct> y;
};
Теперь мне нужно указать MyStruct
в файле заголовка, который пользователь может включать в себя так, что они знают, что его расположение. Однако для этого требуется, чтобы я также отображал заголовок для MyPrivateStruct
, который я не хочу делать. Поскольку размер unique_ptr
одинаковый независимо от типа, возможно ли сделать что-то подобное?
struct MyStruct {
int x;
private:
std::unique_ptr<auto> y;
};
Типом y
затем будет определяться моих cpp
файлов.
Это не совсем тот же вопрос, как Can't use std::unique_ptr<T> with T being a forward declaration, так как ответ на этот вопрос заключается в использовании прямой декларации. Этот вопрос касается проблемы при использовании форвардных деклараций.
Просто вперед объявите структуру? Или это то, чего вы пытаетесь избежать? – Borgleader
Возможный дубликат [Невозможно использовать std :: unique \ _ptr с T, являющимся передовым объявлением] (http://stackoverflow.com/questions/28386185/cant-use-stdunique-ptrt-with-t-being- a-forward-declaration) –
LogicStuff
@LogicStuff не совсем; см. править. – sdgfsdh