Сокращение препроцессора для const * const

У меня большой код, и многие из моих функций принимают аргументы типа
<typename> const * const <varname> или же <typename> const * const * const <varname>

Было бы ужасно оскорбительно определять сокращение препроцессора как
_CsC или же _CsCsC

например
#define _CsC const * const а также #define _CsCsC const * const * const

Где C обозначает const и s обозначает * и _ чтобы привлечь ваше внимание, что это #defineд стенография.

Я понимаю, что первоначальной реакцией может быть «А что?» но как только вы прочитаете больше, чем несколько строк кода, кажется, что вы привыкнете к нему, и это улучшит читабельность, позволяя вам быстрее увидеть тип / имя_переменного …

Начальные тесты компилируются, и двойные указатели, как мне кажется, гораздо более читабельны.

1

Решение

Используйте шаблон:

template <typename T> using CsCsC = const * const * const T;

Использование:

CsCsC<Foo> x = /* ... */;
4

Другие решения

Это было бы ужасно и оскорбительно, да. Использовать typedef вместо.

6

Чтобы объяснить ответ Лучиана:

если вы используете

typedef int * IntPtr;
typedef int ** IntPtrPtr;

а ты пишешь

const IntPtr x;
const IntPtrPtr y;

тогда это равно

const int * const x;
const int * const * const y;
0
По вопросам рекламы [email protected]