C ++:使用auto还是typedef?

时间:2012-02-16 13:47:16

标签: c++ visual-studio-2010 c++11

我不想在这里问一个有意的主观问题,但我没有其他人直接问这个......

我正在尝试通过在我编写的新代码中采用更现代的C ++概念,在我的团队中“以身作则”。我的同事有点害羞的模板,并且抱怨在使用我最近创建的一些类时必须输入unique_ptr<Foobar>shared_ptr<Foobar>而不是Foobar*(工厂方法返回{{1}我和我使用unique_ptr)将这些对象的列表存储在向量中。

他们扭曲了我的手臂,并说服我将这些类型设置为更容易输入的内容,例如shared_ptr

但是现在我对这些typedef的const-correctness一团糟。我必须为每个const和非const类型定义额外的typedef,FoobarUniquePtr似乎不能正确表达const语义。

所以,就我的问题而言,当他们抱怨必须输入模板化的智能指针时,停止使用这些typedef并将const const_FoobarUniquePtr推给我的队友是否有意义?我也对其他选择持开放态度。

4 个答案:

答案 0 :(得分:15)

一般来说, auto 让您的生活更轻松。

如果您没有在任何深奥的架构上发货(并且没有计划很快就这样做),答案应该是“尽可能使用自动”。

答案 1 :(得分:8)

我想您需要定义您可能需要的所有变体。

让你的家伙看看Bjarne Stoustrup的演讲并阅读C ++ 11中的一些博客。至于模板,请购买书籍清单上的一些书籍,然后“coincedentially”将其中的一些书放在桌面上以开始讨论。

你甚至可以写一些powerpoint presentions,并将它们呈现给你的团队成员,并建立一种研究文化。

Bjarne Stroustrup: C++11 Style

图书清单:https://stackoverflow.com/tags/c%2b%2b/info

答案 2 :(得分:4)

  

我必须为每个const和非const类型

定义额外的typedef

...随着const适合该类型的地方数量的增加,这将导致组合爆炸。向你的同事解释,你正在做的工作量呈指数增长,因为他们正在与语言作斗争而不是使用它。是的,在适当的时候使用auto

答案 3 :(得分:1)

当我创建新课程时,我要做的第一件事就是:

class MyClass
{
public: // Typedefs
    typedef std::shared_ptr<MyClass> Ptr;
    typedef std::shared_ptr<const MyClass> ConstPtr;
};

然后我的班级用户可以使用它:

MyClass::Ptr pMyClass = std::make_shared<MyClass>();

我将它们作为公共typedef添加到类中的原因是我讨厌污染全局命名空间。