2016-01-26 3 views
1

Возможно ли создать shared_ptr для * анонимной структуры? * Я не совсем уверен, что структура ниже представляет собой анонимную структуру. Например;Общий указатель на анонимную структуру

struct { HWND hwnd; } *tmpArgs; 
tmpArgs->hwnd = hwnd; 

std::shared_ptr<struct> evtArgs(tmpArgs); // possible? right now its a compile error "'struct': missing tag name" 

// usage 
evtHandler(evtArgs); // evtHandler(std::weak_ptr<void> EventArguments); 

У меня есть очень узкий/специализированный случай, когда мне нужно передать структуру tmpArgs, не будет использоваться в другом месте в приложении. Поэтому мне не нужно объявлять новый тип struct.

+0

Примечание: Как вы думаете, что такое значение 'tmpArgs', когда этот код работает? (Значение самого указателя - то есть, на что оно указывает?) – immibis

ответ

3

Вы можете получить shared_ptr вы жаждете ...

std::shared_ptr<std::remove_pointer<decltype(tmpArgs)>::type> evtArgs(tmpArgs);

но вы не собираетесь быть в состоянии передать его из сферы действия этого кода в любом полезном способе.

Потенциально, это было бы полезно, если вы пытаетесь обеспечить, чтобы класс ссылался только на shared_ptr или weak_ptr, и поэтому вы помещаете этот материал в область пространства имен. Но для меня это кажется удачным от хорошего стиля кодирования.

Смежные вопросы