для unique_ptr?
тимплей?
Какой стандарт?
template <typename TPointer> constexpr inline is_raw_or_unique_ptr = std::is_pointer_v<TPointer> || std::is_same_v<TPointer, std::unique_ptr<typename std::pointer_traits<TPointer>::element_type>>; template <typename TPointer> void foo() { static_assert(is_raw_or_unique_ptr<TPointer>, "TPointer should be raw or unique pointer"); }
Я кстати наверное не правильно вопрос задал. Мне нужно что бы тимплейт обрабатывал И умные указатели и обычные. Я понимаю (наверное) уже как из примера вывести что мне надо. Но вопрос был к тому, что я же не могу вытворять что хочу внутри тимплейта, если он принимает умный указатель, как если бы это было бы просто некое значение. MyTemplate<int> MyTemplate<int*> MyTemplate<unique_ptr<int» «« вот тут же может произойти что то не хорошее?
Чем умный указатель у тебя отличается от обычного?
Умный отслеживается компилятором?
Для тебя какая разница какой тип в аргументах шаблона?
Если я внутри буду его двигать или удалять, я не очень понимаю вообще не понимаю как он себя поведет.
Дак не двигай и не удаляй
Ну это уже на моих кривых руках же ответственность. Нафиг тогда он мне умный?
Нафиг тебе сырой двигать и удалять? Сырой владеющий указатель не двигают. А удалять сырой владеющий указатель тоже не надо - лучше обернуть его в unique_ptr
У меня там супер структура данных в шаблоне. (С сишным апи), она может двигать и удалять.
Ну дак ты определись тогда что ты хочешь делать в случае умного указателя?
Давай описывай что она делает и зачем
Там очередь асинхронная на си. Она принимает указатель на переменную и ее размер, после чего копирует в себя. Я над ней пытаюсь навернуть шаблон, который сможет в умные указатели.
Ну я могу чуть позже наварганить
Что она делает с указателем?
В данный момент я просто родил 2 шаблона, 1 под умные указатели (с мувами и релизом на входе и повторной оберткой на выходе) И другой под все остальное. Но мне это не оч нравится, хочу один.
С указателем на переменную? Копирует в себя содержащееся по указателю. BaseType_t xQueueSend(QueueHandle_t xQueue, const void * pvItemToQueue); Вот вызов, размер итема она при инициализации узнает. В случае с указателями это будет myitem item; xQueueSend(queue, &item);
Можешь показать реализации?
Моей обертки или самой либы?
Обсуждают сегодня