Здравствуйте, lpd, Вы писали:
lpd>Я сторонник того, чтобы оптимизировать алгоритм, а код оставлять максимально простым и понятным.
Ну надо же. В какую сторону вы еще разговор уведете вместо того, чтобы показать type-safe union без шаблонов на полиморфизме?
lpd>Для оптимизации все равно union и ассемблер сильнее, чем шаблоны и компилятор.
Правда?
lpd>Я имел ввиду либо базовый result_t, либо базовый reply_t — не обязательно оба вместе.
Это понятно. Только вы, очевидно, не отдаете себе отчет о том, как будет меняться код в одном и другом случае. Приходится вам это объяснять.
lpd>Отличие только в том, что с использованием полиморфизма для result_successful_t и result_failure_t нужно будет добавить один базовый класс: result_t. Мне такой путь нравится больше шаблонов, хотя похоже, что это вопрос предпочтений.
Ну так напишите хотя бы приблизительный код. Сразу станет видно и его объем, и его надежность, и его понятность.
S>>И передавать их как? Через unique_ptr? lpd>Умные указатели я считаю только усложняющими управление памятью, хотя это оффтоп. Передавать просто через указатель "result_t *" — это самое простое.
Т.е. мы создаем result в динамической памяти? Дергаем хип и создаем лишнюю косвенность там, где можно было обойтись передачей/перемещением значения.
А потом, что вообще прекрасно, отдаем кому-то владеющий голый указатель в надежде на то, что кто-то когда-то его удалит?
Етить-колотить, казалось, что в мире C++ подобные взгляды на управление памятью уже в дикой природе не встречаются, только в каких-то особых замкнутых заповедниках. А поди ж ты.
lpd>reply_t и result_t обычно простые классы.