std :: shared_ptr/std :: make_shared的语法较短

Dan*_*vil 2 shared-ptr c++11

我厌倦了写作std::shared_ptr<MyClass>,std::make_shared<MyClass>在考虑了这个之后,我想找到一个更短的语法.

对于我的短期科学项目,我经常只需要非常快速地生成代码并且更喜欢严格的语法 - 只是不要评论它;)

所以我虽然这个:

#define PTR(X) std::shared_ptr<X>
#define NEW(X) std::make_shared<X>

PTR(MyClass) p = NEW(MyClass)(args)
Run Code Online (Sandbox Code Playgroud)

或者关于这个:

template<typename T> using ptr = std::shared_ptr<T>;
template<typename T, typename... Args>
ptr<T> make(Args... args) {
     return std::make_shared<T>(args...);
}

ptr<MyClass> p = make<MyClass>(args);
Run Code Online (Sandbox Code Playgroud)

您认为这些方法的优点/缺点是什么?有更优雅的方式吗?

Yak*_*ont 7

using std::make_shared; // at file scope, after all #includes
auto p = make_shared<Bob>(a,b,c);
Run Code Online (Sandbox Code Playgroud)

但我个人喜欢std::.

使用auto很好,因为在同一行上重复两次类型是不必要的噪音.