c++ - typedef boost::shared_ptr<MyJob> Ptr;或者#define Ptr boost::shared_ptr

标签 c++ boost naming-conventions shared-ptr

我刚刚开始研究一个新的代码库,其中每个类都包含一个 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/

相关文章:

c++ - 控制台崩溃,无法识别错误?

c++ - 在 windows 中使用互斥量进行进程间同步(win32 或 C++)

c++ - 无法使用带有英特尔 C++ 编译器的 boost::spirit 编译程序

c++ - 将 boost 绑定(bind)处理程序作为参数传递给 asio 绑定(bind)处理程序

Javascript ENUM 模式命名约定

C# 代码分析不喜欢 protected 静态 s_Foo(CA1709、CA1707)

java - 将 jpeg 转换为 gif 太长

c++ - 何时使用 DLL_PROCESS_VERIFIER 标志调用 DllMain?

c++ - 在 eclipse cdt 中找不到库文件

namespaces - 包/命名空间的 TypeScript 命名约定是复数还是单数?