как я могу выровнять двоеточия в троичном операторе?

#c #clang-format

Вопрос:

Я хочу, чтобы мой код был выровнен следующим образом

 double flagx_ul = wx * 2 gt; wy *3 ? -wy * 3 / 2 / wx : -1.0; double flagy_ul = wx * 2 gt; wy *3 ? 1.0 : wx * 2 / 3 / wy; double flagx_lr = wx * 2 gt; wy *3 ? wy * 3 / 2 / wx : 1.0; double flagy_lr = wx * 2 gt; wy *3 ? -1.0 : -wx * 2 / 3 / wy;  

все, что я нашел в документах clangformat, это

 BreakBeforeTernaryOperators (Boolean) clang-format 3.7 If true, ternary operators will be placed after line breaks.  true: veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription  ? firstValue  : SecondValueVeryVeryVeryVeryLong;  false: veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?  firstValue :  SecondValueVeryVeryVeryVeryLong;  

Как я могу держать их в одной линии, но выровнять ? и :

Ответ №1:

Удобочитаемость значительно повышается за счет создания функций, даже для коротких утверждений. И в этом случае это также может помочь вам уменьшить дублирование кода. Вот пример :

 bool fn(const double a, const double b) {  return (a / b) * (3.0 / 2.0); }  int main() {  double wx = 1.0;  double wy = 2.0;   // only do your predicate calculation once.  auto pred = ((wx * 2.0) gt; (wy * 3.0));   // and by using ! you can align the most similar parts of the ternary operation.  double flagx_ul = pred ? fn(-wy,wx) : -1.0;   double flagy_ul = !pred ? fn( wx,wy) : 1.0;  double flagx_lr = pred ? fn( wy,wx) : 1.0;  double flagy_lr = !pred ? fn(-wx,wy) : -1.0; }  

Комментарии:

1. Я понимаю вашу точку зрения, но в данном случае я просто хочу знать, как выровнять двоеточия, чтобы я мог быстро вычислить флаги и флаги . Если код стоит того, чтобы его прочитали другие, я угрюмо сделаю, как вы скажете.