Синтаксическое предложение: читаемость шаблонных объявлений типов - PullRequest
1 голос
/ 19 апреля 2010

Интересно, будет ли по вашему мнению полезен следующий синтаксис, который может ухудшить читаемость кода и комментировать код:

std::map<std::string name, std::vector<int> scores> myMap;  

В этом примере ясно сказано, и никаких других комментариев не требуется, для чего мы используем переменную myMap.

Ждем ваших мнений.

Ответы [ 4 ]

3 голосов
/ 19 апреля 2010

На мой взгляд, проще, приятнее и практичнее реализовать некоторые определения типов, такие как:

typedef std::string NAME;
typedef std::vector<int> SCORES;

std::map<NAME, SCORES> myMap;
1 голос
/ 19 апреля 2010

Комитет по стандартизации C ++ будет спорить по этому вопросу в течение 10 лет, а затем отвергнет его. Выберите хорошее имя переменной, myMap довольно бесполезен:

std::map<...> NameToScoreMap;

И хороший редактор, так что вам не придется вводить его полностью каждый раз, когда вы используете карту. Функциональный венгерский по сути та же идея.

1 голос
/ 19 апреля 2010

Лично я с готовностью пишу using namespace std; Как общая идея для пространств имен, это не рекомендуется, но std настолько повсеместно, что ИМХО, это совершенно нормально, и экономит много печатания.

map<string, vector<int> > myMap;  

Для любого программиста C ++, имеющего хотя бы некоторый опыт, вышеизложенное является максимально читабельным (и, вероятно, более, из-за гораздо менее излишнего синтаксиса std::). Обратите внимание, что я удалил имена: я не думаю, что они добавляют много в реальном коде. Там, где это действительно важно, просто бросьте короткий комментарий:

// maps names to an array of scores
map<string, vector<int> > myMap;  

Общий аргумент против комментариев заключается в том, что они не будут поддерживаться, потому что у них нет реальной семантической ценности для кода. То же самое можно сказать и об именах в предложенном вами синтаксисе, поэтому при добавлении дополнительного синтаксиса ничего не получается.

0 голосов
/ 19 апреля 2010

Более описательное имя для myMap, вероятно, поможет больше, например, scores_by_name.

А как же:

std::map<std::string /*name*/, std::vector<int> /*scores*/> myMap;  

или

std::map<std::string, std::vector<int> > myMap; //name - scores

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

Возможно, это предложение может быть полезным для помощи intellisense, но тогда вам также не придется разрешать:

std::string name myString;

и т.д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...