Здравствуйте, lpd, Вы писали:
S>>Интересно было бы посмотреть на type-safe union без шаблонов на полиморфизме.
lpd>В 98% случаев абсолютно все равно, сколько структура занимает памяти — сейчас не 1Mb памяти на все, и многие вообще пишут на Java.
В том-то и дело, что там, где не важно потребление ресурсов, спокойно пишут на Java/Scala/Kotlin/Ceylon, C#/F#/VisualBasic, Python, Ruby и даже, как говорят, на Haskell-е. Место для C++ осталось там, где важно иметь контроль за происходящим.
lpd>В твоем примере можно просто reply_success_t и reply_failure_t унаследовать от reply_t, и этого достаточно для реализации любой логики.
Во-первых, *_resul_t специально отделены от reply_t. Т.к. там, где получается *_result_t, никто ничего не знает о reply_t.
Во-вторых, логика будет усложнена за счет того, что придется ловить не один reply, а два разных (а потом, возможно и больше).
lpd>Либо result_success_t и result_failure_t унаследовать от result_t.
И передавать их как? Через unique_ptr?
lpd>В крайнем случае использовать union для полей, но только если это действительно необходимо.
C union-ом все становится интереснее как только туда помещаются данные с нетривиальными деструкторами. И тогда сразу же возникает вопрос: чем это лучше std::variant?