我不想在这里问一个有意的主观问题,但我没有其他人直接问这个......
我正在尝试通过在我编写的新代码中采用更现代的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
推给我的队友是否有意义?我也对其他选择持开放态度。
答案 0 :(得分:15)
一般来说, auto 让您的生活更轻松。
如果您没有在任何深奥的架构上发货(并且没有计划很快就这样做),答案应该是“尽可能使用自动”。
答案 1 :(得分:8)
我想您需要定义您可能需要的所有变体。
让你的家伙看看Bjarne Stoustrup的演讲并阅读C ++ 11中的一些博客。至于模板,请购买书籍清单上的一些书籍,然后“coincedentially”将其中的一些书放在桌面上以开始讨论。
你甚至可以写一些powerpoint presentions,并将它们呈现给你的团队成员,并建立一种研究文化。
答案 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添加到类中的原因是我讨厌污染全局命名空间。