Сократить статические определения - PullRequest
1 голос
/ 26 мая 2011

Если у меня есть класс с именем SomeClassName, могу ли я избежать написания SomeClassName:: каждый раз, когда я ссылаюсь на что-то в этом классе? Я думаю о том, что такое пространство имен, где я могу заключить определения в using MyNamespace { ... }; и избежать написания пространства имен, под которым класс находится каждый раз (плохая практика?).

Одна из причин заключается в том, что теперь у меня есть такой код, который довольно длинный и трудно читаемый imo:

SomeClassName::SimpleStruct SomeClassName::m_someTable[SomeClassName::m_someTableSize][SomeClassName::m_someTableSize] = {SomeClassName::EmptyStruct};

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

Нет, но вы можете сократить имя с помощью typedef, если все, что вам нужно, это меньше набирать:

typedef SomeClassName SCN;
1 голос
/ 26 мая 2011

К сожалению, вам необходимо полностью квалифицировать имена идентификаторов с помощью оператора разрешения области действия :: при обращении к идентификатору внутри другого пространства имен / области (классы также определяют область действия), а директива using работает только с пространствами имен,Единственный другой вариант - использовать typedefs, как упоминал Джон, или, возможно, макросы.Если бы у вас не было этого ограничения, то вы бы столкнулись с конфликтами имен идентификаторов повсюду и в конечном итоге с соглашениями об именах в стиле C, где имена функций могут быть очень длинными, потому что они в основном помещают пространство имен в функцию /имя идентификатора.

1 голос
/ 26 мая 2011

Просто используйте глобальные типы / перечисления.

...