4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
1 | ||||||
Не получается reinterpret_cast<uint64_t>31.12.2014, 10:50. Показов 6842. Ответов 88
Метки нет (Все метки)
1
|
31.12.2014, 10:50 | |
Ответы с готовыми решениями:
88
А где uint64_t декларирован? Uint64_t - проверить его существование Ошибка компиляции: 'uint64_t' does not name a type Модуль часов DS3231, преобразование UNIX TimeStamp uint32_t в uint64_t |
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
||||||
31.12.2014, 19:32 | 21 | |||||
Сообщение было отмечено taras atavin как решение
Решение
Справедливости ради, в задаче ТС такое скорее всего действительно невозможно.
Но я говорил в общем. А пример вот такой:
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
31.12.2014, 19:47 | 22 |
Понял вас.
Технически такое может быть, например при десереализации из блоба, в который закатали упакованные структуры...
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
31.12.2014, 19:51 | 23 |
Да-да.
Может быть конечно зря я панику тут навожу. Но по работе часто приходится иметь дело с такими архитектурами, где это критично (в частности 32-разрядные MIPS и SPARC). Поэтому у меня выработалась уже некоторая паранойя на этот счет
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 07:11 [ТС] | 24 |
Что делает этот член?
Добавлено через 36 секунд И что здесь изменилось то? Добавлено через 34 секунды А зачем здесь это? Добавлено через 10 минут Конечно захочу. Но: 1. Поняв принцип, не проблема сделать это вручную. 2. От размера должен зависеть алгоритм. Добавлено через 16 минут А мне вот интересно, почему в таких случаях не выровненное чтение не компилится в побайтное. Даже если процессор не может читать произвольный байт регистра, что ожидаемо, можно ведь побайтно сравнять в выровненном участке оперативы, а потом загрузить все 8 байт. Добавлено через 8 минут Приводить через указатель? Понятно. Добавлено через 6 минут Что это значит?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
||||||
01.01.2015, 15:27 | 25 | |||||
Чтобы не писать по нескольку раз sizeof(uint64_t). Зачем вообще делают именованные константы знаешь? Вот это тоже самое.
Читай про SFINAE и enablle_if Насчет вручную - это уж как хочешь. Но зачем копипастить то, что хорошо шаблонизируется? Насчет второго пункта - не вижу преград для этого. Чтобы работать с этим типом так, как будто это PatternT. Базовая идея такая: мы создаем тип, внутреннее представление которого определяет PatternT (где PatternT = uint64_t, в других случаях может быть, например, uint32_t и т.д.). Этот тип свободно приводится к PatternT в выражениях посредством этого оператора (operator PatternT). А шаблонный конструктор позволяет на низком уровне записать во внутреннее представление какие угодно данные той же разрядности. Можно конечно убрать инкапсуляцию и просто все время писать вот так:
Компилятор не знает ничего о конкретных адресах. Вообще на некоторых архитектурах есть специальные команды для работы с невыровненными данными, но по-умолчанию в целях эффективности компилятор их не использует. Добавлено через 2 минуты Ничего. Чтобы понять эту строчку читай ссылки, который я выше дал.
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 15:38 [ТС] | 26 |
1. А почему под энамом?
2. А что за проблема написать sizeof? 3. То есть много раз размещать восьмёрку в оперативе по-вашему нормально? Да ещё и в стеке. Добавлено через 57 секунд Какую "эту строчку"? Там ваще то тело функции. Добавлено через 1 минуту Зачем? В теле одной функции применить точечную нотацию - не проблема, а внутри тот же PatternT. При этом код будет оптимален и полностью совпадёт с кодом, юзающим инлайн-версию того же оператора приведения. Читает то одна единственная функция, по всему тексту надо только писать и после обработки наружу выдаётся PatternT.
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.01.2015, 15:47 | 27 |
Что? Ничего подобного. Ничего нигде не размещается - это константа времени компиляции.
Почему ссылки мои не смотришь? Я вообще там выше давал ссылку, где есть дизассемблер этого кода. Там хорошо видно, что никакого оверхеда этот код не дает вообще. Ну ты процитировал тело функции в одну строчку. Вот я и сказал "строчку". Я свои решения не патентую. Если что-то хочешь изменить - меняй
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 15:50 [ТС] | 28 |
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.01.2015, 15:52 | 29 |
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 15:52 [ТС] | 30 |
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.01.2015, 15:56 | 31 |
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 15:58 [ТС] | 32 |
Кстати, проще уж написать сайзоф, чем несколько раз вспомнить, как его переобозвал, а константы применяются совсем не для этого. Константа применяется, когда некоторое число можно как-то осмысленно обозвать и оно может измениться в ходе разработки. А здесь другие значения существуют одновременно для других целей, а изменение в следующей версии исключено и при это единственное осмысленное имя - тот самый sizeof.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
01.01.2015, 15:58 | 33 |
Я мимо проходил и не особо вникал: не логичнее этот параметр сделать параметром шаблона, а не функции? Он же функционально только ради идиомы sfinae, а не для приема конкретного аргумента?
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 16:05 [ТС] | 34 |
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.01.2015, 16:12 | 35 |
Он как раз для приема аргумента. Аргументы могут быть разные ведь. В первоначальном варианте в качестве аргумента может и массив нужного размера. Как этот размер проверить, если вынести проверку в параметр шаблона?
Как вам будет угодно. В первоначальном варианте этого все равно не было. А позже добавилось для иллюстрации. Меняем параметр шаблона, и число тоже меняется. Так что все верно и не противоречит тому, что ты написал. Но я повторюсь, не нравится - не используй. Не вижу смысла выносить это на обсуждение. Я тебе дал пример, он на самом деле крайне простой. Если ты почерпнешь оттуда что-то - хорошо, нет - еще лучше. Мое дело, как говорится, предложить, а твое дело отказаться. Добавлено через 47 секунд Ничего не надо прописывать. Там же шаблон.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
01.01.2015, 16:22 | 36 |
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 16:22 [ТС] | 37 |
Всё затеяно ради того, чтоб иметь одну версию и не перегружать.
Вот только надо при каждом обращении вспоминать, как его обозвал. Зачем?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.01.2015, 16:27 | 38 |
Что? Она для внутреннего использования. Не надо ничего вспоминать
При обращении пользователь класса даже не знает что она там есть Добавлено через 2 минуты Именно одну версию ты и будешь иметь. Тип один, функция одна, а параметры любые заданной разрядности. Именно то, что ты хотел. Не понимаю в чем проблема
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
01.01.2015, 16:36 [ТС] | 39 |
Сколько версий конструктора будет в исполняемом коде? И типов как раз надо много. double, int64_t, uint64_t, классы... Всё надо свалить в одну функцию.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
01.01.2015, 16:52 | 40 | |||||
Это глупость:
1. Экономия на спичках. 2. Компилятор сам оптимизирует во всех случаях, когда это возможно. 3. Если компилятор не оптимизировал, значит в любом случае придется запиливать перегрузки функци. Вопрос только: это будет делать человек в ручную, или компилятор по шаблону? DrOffset , можете глянуть ассм-код: оптимизировал ли компилятор конструкторы? http://rextester.com/VOE80385
1
|
01.01.2015, 16:52 | |
01.01.2015, 16:52 | |
Помогаю со студенческими работами здесь
40
Reinterpret_cast reinterpret_cast Reinterpret_cast reinterpret_cast<...>(...) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |