2014-03-19 3 views
3

Вводя синонимы к «авто»Введение синонимов для «авто»

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

#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 (безумный): Существуют ли основополагающие причины для отказа авто в typedefs (возможность реализации, плохое взаимодействие с другими функциями)? (Предполагая, что «typedef auto» доступен, проблема может быть решена тривиально)

+1

Q4. Поскольку 'auto' не является именем типа, вы не можете ввести новое имя, используя' typedef'. 'typedef' не работает с помощью подстановки текста, в отличие от макросов. – molbdnilo

ответ

3

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

+0

+1, согласитесь, такие синонимы в лучшем случае вводит в заблуждение. 'const auto &' довольно самодокументируется. – Nim

3

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

Смежные вопросы