Вводим синонимы для "авто"


Вводим синонимы для "auto"

Я хотел бы использовать "почти всегда авто" стиль С++, но в более описательной форме, отражающей семантику инициализации.
Для этого я хочу ввести синонимы для 4 различных видов использования auto.
Общую идею можно понять из примера:

#define Val const auto // initialize (immutable) value
#define MVal auto // initialize mutable value
#define Ref const auto& // initialize (immutable) reference 
#define MRef auto&& // initialize mutable reference

Val num = 2 + 2;

MVal count = 0;
++count;

Ref widget = GetWidget();

MRef gadget = GetGadget();
gadget.ChangeState();

Возникает несколько вопросов:

Q1 : Можно ли ввести синонимы без макросов?
Q2 : Если макросы неизбежны, как я могу смягчить вред от их использования (предполагая, что синонимы должны быть действительно короткими)?
Q3 (в первую очередь на основе мнения): является ли это вообще хорошей идеей (по сравнению с голым стилем AAA) с точки зрения читаемости/стиля?
Q4 (insane): существуют ли какие-либо фундаментальные причины для запрета auto в typedefs (реализуемость, плохое взаимодействие с другими функциями)? (Предполагая, что "typedef auto" доступен, проблема может быть решена тривиально)

2 3

2 ответа:

Q1. № Q2. Используя их как можно меньше. Q3. Совсем плохо. Программисты C++ привыкли к заданному синтаксису. Q4. Я не понимаю, что вам там нужно и зачем.

Q1. да, синонимы могут быть введены таким образом. Q2. Используйте ALLUPPERCASE, чтобы следовать конвенции. Q3. Но в целом это не очень хорошая идея, и я бы нашел более читаемый const auto, чем VAL Q4. Я думаю, что он не поддерживается, потому что typedef-это определенный тип, а const auto - Нет.