我刚刚开始研究一个新的代码库,其中每个类都包含一个 shared_ptr typedef ( similar to this),例如:
typedef boost::shared_ptr<MyClass> Ptr;
保存输入 boost::shared_ptr 的唯一目的是什么?
如果是这样,那是唯一不做的理由
#define Ptr boost::shared_ptr
在一个通用 header 中#define 的一般问题?然后你可以这样做:
Ptr<MyClass> myClass(new MyClass);
不需要打字
MyClass::Ptr myClass(new MyClass);
并保存每个类中的Ptr定义。
最佳答案
宏 (#define) 总是全局定义的。 这意味着每次使用“字符串”Ptr(甚至是变量)都将被宏替换。
typedef 可以放在类中,命名空间中,...所以您可以更好地控制它。
编辑: 另一个优点是您可以在不同的类中使用不同的 Ptr 类型,例如
- ClassX::Ptr 是一个 boost shared_ptr
- ClassY::Ptr 可以是另一个 shared_ptr
- ClassZ::Ptr 可以是一个简单的“Class Z *”指针
如果随后在模板化代码中使用这些类,您可以使用 T::Ptr 作为指向该类的指针类型,模板将使用最适合该类的指针。
关于c++ - typedef boost::shared_ptr<MyJob> Ptr;或者#define Ptr boost::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052625/