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

Кто-Нибудь может подсказать что тут можно использовать чтобы избавиться от

страшных макросов и перечисления всех возможных enum'ов?

То что внутри свича не констэкспрное

void topResults(unsigned int n, InferenceEngine::Blob& input, std::vector<unsigned>& output) {
#define TBLOB_TOP_RESULT(precision) \
case InferenceEngine::Precision::precision: { \
using myBlobType = InferenceEngine::PrecisionTrait<InferenceEngine::Precision::precision>::value_type; \
InferenceEngine::TBlob<myBlobType>& tblob = dynamic_cast<InferenceEngine::TBlob<myBlobType>&>(input); \
topResults(n, tblob, output); \
break; \
}

switch (input.getTensorDesc().getPrecision()) {
TBLOB_TOP_RESULT(FP32);
TBLOB_TOP_RESULT(FP64);
TBLOB_TOP_RESULT(FP16);
TBLOB_TOP_RESULT(Q78);
TBLOB_TOP_RESULT(I16);
TBLOB_TOP_RESULT(U8);
TBLOB_TOP_RESULT(I8);
TBLOB_TOP_RESULT(U16);
TBLOB_TOP_RESULT(I32);
TBLOB_TOP_RESULT(U32);
TBLOB_TOP_RESULT(U64);
TBLOB_TOP_RESULT(I64);
default:
THROW_IE_EXCEPTION << "cannot locate blob for precision: " << input.getTensorDesc().getPrecision();
}

#undef TBLOB_TOP_RESULT
}

13 ответов

5 просмотров

X_MACRO может помочь

Интересно, сколько за такое бьют... Перечислять все равно придется, правда (итерирование по перечислению требует ту или иную форму интроспекции, которой в стандарте нет, так или иначе), зато макросов нет, не так ли?) https://pastebin.com/WqyG8L1y Надеюсь, нигде не опростоволосился =)

Aleksei-Budyakov Автор вопроса
Aleksei Budyakov
Спасибо! Чуть позже погляжу, позапускаю

А чем X_MACRO не угодил? Один раз перечислить в нём все возможные варианты, потом использовать. Я правда не увидел в исходном коде, нужен ли препроцессор, поэтому возможно получится обойтись одним тайплистом

Aleksei-Budyakov Автор вопроса
Alexander Karaev
А чем X_MACRO не угодил? Один раз перечислить в нё...

Я его тоже посмотрю. Раньше никогда не использовал. Но выглядит тоже страшно. Спасибо вам тоже *

Aleksei-Budyakov Автор вопроса
Sergey Anisimov
Интересно, сколько за такое бьют... Перечислять вс...

А что это за код стайл? Вы всегда так пишете?

Aleksei Budyakov
А что это за код стайл? Вы всегда так пишете?

С недавних пор - да. Пытался выработать консистентный стиль неоднократно, но с крестами это оказалось очень непросто сделать. В итоге - попробовал "вертикальный" подход вместо "горизонтального" и, в принципе, стало читабельнее, имхо, во многих местах (длинные составные условия, aliasing типов и определение концептов, а также выражения (в частности - с листовыми и агрегатными инициализациями) - яркий пример). Однозначной определенности в форматировании, впрочем, еще нет - слишком мало "обкатывал" еще.

Aleksei-Budyakov Автор вопроса
Sergey Anisimov
С недавних пор - да. Пытался выработать консистент...

А не подскажете (... || topResultsInner<precisions>(n, input, output)) || (throw "Invalid Precision!", true);Параметр анфолдинг тут понятен, а вот вторая часть с throw не совсем.

Aleksei Budyakov
А не подскажете (... || topResultsInner<precision...

Вычисление не дойдет до throw, если хоть один из операндов 'или' будет 'true'

Aleksei Budyakov
А не подскажете (... || topResultsInner<precision...

Это такое костыльное представление Вашего default-case'а. Вы можете его как угодно расписать на самом деле, в т.ч. через более конвенционный if-else. Такое оформление - чисто мои "приколы". Но суть одна и та же: как сам fold работает через lazy-вычисление логики, так и этот импровизированный default-case. А , true там нужен только за тем, чтобы такое выражение в принципе можно было в качестве операнда || подставить. Собственно, именно за это обычно и бьют =) Вся идея довольно простая, в итоге. Логика работает через lazy-вычисления, а fold-expression обеспечивает "кодогенерацию". Все остальное - лишь семантические посредники, чтобы заставить это работать. Такой подход к описанию логики вдохновлен POSIX-шеллом)

Aleksei-Budyakov Автор вопроса
Sergey Anisimov
Это такое костыльное представление Вашего default-...

Интересные "приколы". Мне нравится. Я пока не особо руку набил на таких шаблонных приколах, так что спасибо что делитесь опытом. Скомпилировать вот не удалось ( /home/openvino/src/code/common/samples/classification_results.h:103:15: note: template argument deduction/substitution failed: /home/openvino/src/code/common/samples/classification_results.h:123:68: error: call to non-'constexpr' function 'InferenceEngine::Precision::Precision(InferenceEngine::Precision::ePrecision)' 123 | topResults<Pr::FP32, Pr::FP16>(n_to_show_, *out_blob_, results_);

Aleksei Budyakov
Интересные "приколы". Мне нравится. Я пока не особ...

test-case я нормально на godbolt'е собирал предварительно. Можете куда-нибудь на pastebin залить Вашу имплементацию? Судя по ошибке, она куда-то за пределы всей этой ситуации поинтит.

Aleksei-Budyakov Автор вопроса
Sergey Anisimov
test-case я нормально на godbolt'е собирал предвар...

https://pastebin.com/jFFRvZeK Вот полный код. Вызов происходит в конструкторе ClassificationResult. а в том коде что я скинул вам, не было еще одной перегрузки которая не constexpr. Возможно дело в этом

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

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

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Народ, кто шарит в расширенных разделах (EBR/EPR) на дисках с разметками MBR? Везде пишут (в вики рус/англ) в частности + другие источники смотрел, что первый сектор расширенн...
Eugene Krasnikov (ᴊɪɴ x)
1
помогите решить вопрос ктото решал это?
Михаил Helper
9
что лучше для раста, Clion или IntellJ IDEA?
dbxty
11
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
А вообще существует редактор (современный), который не позиционирует себя как "легковесный, удобный и расширяемый"?
Andrey Zgarbul
7
Карта сайта