170 похожих чатов

Задача 1: Дано: std::vector<int> array; T& get(std::size_t index) { return

array[index];
}
-------------------------
Нужно ли создавать перегрузку для int индекса?

Задача 2:
Дано:
template<typename T>
class A {
...

using ConstReturnType = ?;

ConstReturnType get(std::size_t index) const {
return _pointer[index];
}
}
-------------------------
Как получить ConstReturnType такой чтобы например для маленьких типов возвращалось значение, а для больших референсов: что-то типо такого подойдет:
using ConstReturnType = typename std::conditional<sizeof(T) < sizeof(const T&), typename std::conditional<std::is_trivially_copyable<T>::value, T, const T&>::type, const T&>::type
?

11 ответов

22 просмотра

Подумайте о том, знаете ли вы, как будете обрабатывать отрицательные индексы, пришедшие в функцию

1. Нет, кажется, даже если на проекте приняты знаковые индексы. 2. Можно сделать conditional, но скорее бесполезно

P. S. всё-таки likeThis_ лучше _likeThis, напрягают подчеркивания префиксом

А, да, с размером ссылки бесполезно сравнивать, лучше с char*

Что касается второго вопроса — насчёт полной корректности конструкции не скажу, но должен указать на некоторые детали Во-первых, я могу заверить, что static_assert(sizeof(const T&) == sizeof(T)); и такая проверка не имеет смысла. Стоит сравнивать с sizeof(void*) Во-вторых, почему мы требуем, чтобы тип был строго меньше? Возможно, равный по размеру тип тоже подойдёт? В-третьих, стандартная библиотека вполне полагается на то, что std::string_view следует принимать по значению, а это два указателя В-четвёртых — зубодробительный код вроде typename conditional<B, T, U>::type с C++14 упрощается до conditional_t<B, T, U>. А is_trivially_copyable<T>::value с C++17 до is_trivially_copyable_v<T> уж не говоря о том, что не нужно один conditional вкладывать в другой, когда у нас есть замечательный operator&& В итоге, я бы отталкивался от чего-то такого: template<typename T> using ConstReturnType = std::conditional_t< sizeof(T) <= sizeof(void*) && std::is_trivially_copyable_v<T>, T, const T&>; Но вовсе не факт, что это вам хоть как-то поможет выиграть в производительности

Constantine Drozdov
Ты аргумент и возврат путаешь немного

Мог ошибиться, пока писал это полотно текста, что именно стоит исправить?

Ofee Oficsu
Мог ошибиться, пока писал это полотно текста, что ...

Ты говоришь что 2 потому что string_view лезет, но это же аргумент, а не возвращаемое значение

Constantine Drozdov
Ты говоришь что 2 потому что string_view лезет, но...

Да, немного подправил текст, пусть будет так

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта