Подтвердить что ты не робот

С++: использовать auto или typedef?

Мне бы не хотелось задавать здесь преднамеренно субъективный вопрос, но у меня нет никого, кто мог бы задать это прямо...

Я пытаюсь "привести пример" в своей команде, приняв более современные концепции С++ в новом коде, который я пишу. Мои коллеги немного застенчивы от шаблонов и жалуются на необходимость вводить 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 у моих товарищей по команде, когда они жалуются на необходимость ввода шаблонных умных указателей? Я также открыт для других альтернатив.

4b9b3361

Ответ 1

В общем, авто делает вашу жизнь намного проще.

Если вы не отправляете какие-либо эзотерические архитектуры (и не планируете делать это в ближайшее время), ответ должен быть "использовать auto каждый раз, когда сможете".

Ответ 2

Я думаю, вам нужно определить все варианты, которые могут вам понадобиться.

Попросите своих ребят увидеть презентацию из Bjarne Stoustrup и прочитайте некоторые блоги в С++ 11. Что касается шаблонов, купите некоторые из книг в списке книг и "сокрушительно" отбросьте некоторые из них на своем столе, чтобы начать обсуждение.

Вы даже можете написать несколько презентаций PowerPoint, представить их членам вашей команды и создать культуру исследований.

Bjarne Stroustrup: Стиль С++ 11

список книг: fooobar.com/tags/c%2B%2B/...

Ответ 3

Мне нужно было бы определить дополнительные typedefs для каждого типа const и non const

..., что приведет к комбинаторному раздутию, так как число мест, где a const подходит к типу, увеличивается. Объясните своим коллегам, что объем работы, которую вы делаете, увеличивается экспоненциально, потому что они борются с языком, а не используют его. И да, используйте auto, если это необходимо.

Ответ 4

Когда я создаю новый класс, одна из первых вещей, которую я делаю, это:

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, мне не нравится загрязнять глобальное пространство имен.