Является ли использование макросов для сокращения длинных названий шаблонов надстройки плохой практикой? - PullRequest
1 голос
/ 12 марта 2010

Мне надоело писать shared_ptr <>, он очень сильно удлиняет строки кода. Есть причина не делать этого?

Ответы [ 3 ]

10 голосов
/ 12 марта 2010

Зачем использовать макросы? Такой механизм уже существует:

typedef boost::shared_ptr<some_longer_name_omg_help> pointer_type;

pointer_type p; // phew

Если вы спрашиваете о том, что Стив предлагает в комментариях, вы можете попробовать:

template <typename T>
struct sp
{
    typedef boost::shared_ptr<T> type;
};

typedef sp<some_longer_name_omg_help>::type pointer_type;

Но я не знаю, намного ли оно короче.

Я думаю, что ваше использование макросов, честно говоря, признак лени. boost::shared_ptr практически в любой разумной мере "длинный", а вовсе не длинный. Все, что вы делаете, это разрушаете читабельность.

9 голосов
/ 12 марта 2010

У меня есть гораздо более простое предложение: используйте меньше shared_ptr. Если вы так часто их используете, похоже, что вы слепо полагаетесь на них, а не на сборщик мусора. C ++ требует, чтобы вы думали о владении объектом, но если вы это сделаете, большинство умных указателей можно заменить простыми ссылками, которые не длинные.

Вы действительно нуждаетесь в долевой собственности? Если вы остановитесь и задумаетесь на несколько минут, я уверен, что вы сможете точно определить одного владельца объекта и несколько его пользователей, которые будут когда-либо использовать его только при жизни владельца. Так что просто сделайте его локальным / членским объектом владельцев и передайте ссылки тем, кто должен его использовать.

По общему признанию, это не решает проблему в общем случае (есть много других длинных имен шаблонов), но в данном конкретном случае я думаю, что это лучшее решение.

5 голосов
/ 12 марта 2010

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

Конечно, вы можете сказать: «но мы сделаем это только для этого одного типа» ... на что я говорю «остерегайтесь этого скользкого склона»; -)

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