Ответ 1
В общем, авто делает вашу жизнь намного проще.
Если вы не отправляете какие-либо эзотерические архитектуры (и не планируете делать это в ближайшее время), ответ должен быть "использовать auto каждый раз, когда сможете".
Мне бы не хотелось задавать здесь преднамеренно субъективный вопрос, но у меня нет никого, кто мог бы задать это прямо...
Я пытаюсь "привести пример" в своей команде, приняв более современные концепции С++ в новом коде, который я пишу. Мои коллеги немного застенчивы от шаблонов и жалуются на необходимость вводить unique_ptr<Foobar>
или shared_ptr<Foobar>
вместо просто Foobar*
при использовании некоторых классов, которые я недавно создал (factory методы возвращают unique_ptr
и я храню списки из этих объектов в векторах, используя shared_ptr
).
Они скрутили мою руку и убедили меня напечатать их во что-то более легкое для ввода, например FoobarUniquePtr
.
Но теперь я в беспорядке с const-correctness с этими typedefs. Я должен был бы определить дополнительные typedefs для каждого типа const и non const, а const const_FoobarUniquePtr
, похоже, не корректно выражает семантику const.
Итак, на мой вопрос, имеет ли смысл прекратить использование этих typedefs и вместо этого перетащить auto
у моих товарищей по команде, когда они жалуются на необходимость ввода шаблонных умных указателей? Я также открыт для других альтернатив.
В общем, авто делает вашу жизнь намного проще.
Если вы не отправляете какие-либо эзотерические архитектуры (и не планируете делать это в ближайшее время), ответ должен быть "использовать auto каждый раз, когда сможете".
Я думаю, вам нужно определить все варианты, которые могут вам понадобиться.
Попросите своих ребят увидеть презентацию из Bjarne Stoustrup и прочитайте некоторые блоги в С++ 11. Что касается шаблонов, купите некоторые из книг в списке книг и "сокрушительно" отбросьте некоторые из них на своем столе, чтобы начать обсуждение.
Вы даже можете написать несколько презентаций PowerPoint, представить их членам вашей команды и создать культуру исследований.
Bjarne Stroustrup: Стиль С++ 11
список книг: fooobar.com/tags/c%2B%2B/...
Мне нужно было бы определить дополнительные typedefs для каждого типа const и non const
..., что приведет к комбинаторному раздутию, так как число мест, где a const
подходит к типу, увеличивается. Объясните своим коллегам, что объем работы, которую вы делаете, увеличивается экспоненциально, потому что они борются с языком, а не используют его. И да, используйте auto
, если это необходимо.
Когда я создаю новый класс, одна из первых вещей, которую я делаю, это:
class MyClass
{
public: // Typedefs
typedef std::shared_ptr<MyClass> Ptr;
typedef std::shared_ptr<const MyClass> ConstPtr;
};
Тогда пользователь моего класса может использовать его как:
MyClass::Ptr pMyClass = std::make_shared<MyClass>();
Причина, по которой я добавляю их в класс как публичные typedefs, мне не нравится загрязнять глобальное пространство имен.