Я использую shared_ptr и STL в проекте, и это приводит к чрезмерным, подверженным ошибкам типам, например shared_ptr< vector< shared_ptr<const Foo> > >
(я программист ObjC по предпочтениям, где длинные имена являются нормой, и все равно это слишком много.) Я полагаю, что было бы намного яснее назвать это FooListPtr
и документировать соглашение об именах, которое "Ptr" означает shared_ptr, а "List" означает вектор shared_ptr.
Это легко typedef, но это вызывает головные боли с заголовками. Кажется, у меня есть несколько вариантов определения FooListPtr
:
- foo.h. Это переплетает все заголовки и создает серьезные проблемы с построением, поэтому он не запускается.
- FooFwd.h( "прямой заголовок" ). Это то, что предлагает эффективный С++, основанный на iosfwd.h. Это очень непротиворечиво, но накладные расходы на поддержание в два раза числа заголовков в лучшем случае раздражают.
- Common.h(поместите все вместе в один файл). Это убивает многократное использование, перепутывая множество несвязанных типов. Теперь вы не можете просто подобрать один объект и перенести его в другой проект. Это не стартер.
- Какой-то причудливый волшебник #define, который typedef, если он еще не был изменен. У меня есть постоянная неприязнь к препроцессору, потому что я думаю, что это затрудняет поиск новых людей кодом, но, возможно,...
- Используйте векторный подкласс, а не typedef. Это кажется опасным...
Есть ли здесь лучшие практики? Как они выглядят в реальном коде, когда первостепенное значение имеет повторное использование, читаемость и согласованность?
Я добавил эту вики сообщества, если другие хотят добавить дополнительные опции для обсуждения.