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 ответов

3 просмотра

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

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 лезет, но...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта