У меня большой код, и многие из моих функций принимают аргументы типа <typename> const * const <varname>
или же <typename> const * const * const <varname>
Было бы ужасно оскорбительно определять сокращение препроцессора как
_CsC
или же _CsCsC
например
#define _CsC const * const
а также #define _CsCsC const * const * const
Где C
обозначает const
и s
обозначает *
и _
чтобы привлечь ваше внимание, что это #define
д стенография.
Я понимаю, что первоначальной реакцией может быть «А что?» но как только вы прочитаете больше, чем несколько строк кода, кажется, что вы привыкнете к нему, и это улучшит читабельность, позволяя вам быстрее увидеть тип / имя_переменного …
Начальные тесты компилируются, и двойные указатели, как мне кажется, гораздо более читабельны.
Используйте шаблон:
template <typename T> using CsCsC = const * const * const T;
Использование:
CsCsC<Foo> x = /* ... */;
Это было бы ужасно и оскорбительно, да. Использовать typedef
вместо.
Чтобы объяснить ответ Лучиана:
если вы используете
typedef int * IntPtr;
typedef int ** IntPtrPtr;
а ты пишешь
const IntPtr x;
const IntPtrPtr y;
тогда это равно
const int * const x;
const int * const * const y;