C++11 std::shared_ptr/std::make_shared的较短语法

C++11 std::shared_ptr/std::make_shared的较短语法,c++11,shared-ptr,C++11,Shared Ptr,我厌倦了写std::shared_ptr和std::make_shared,在考虑之后,我想找到一个更短的语法 对于我的短期科学项目,我通常只需要非常快速地生成代码,并且更喜欢紧凑的语法——只是不要对此进行评论;) 所以我想: #define PTR(X) std::shared_ptr<X> #define NEW(X) std::make_shared<X> PTR(MyClass) p = NEW(MyClass)(args) template<typen

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

对于我的短期科学项目,我通常只需要非常快速地生成代码,并且更喜欢紧凑的语法——只是不要对此进行评论;)

所以我想:

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

PTR(MyClass) p = NEW(MyClass)(args)
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);
定义PTR(X)标准::共享PTR #定义新(X)标准::使共享 PTR(MyClass)p=新(MyClass)(参数) 或者关于这个:

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

PTR(MyClass) p = NEW(MyClass)(args)
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);
使用ptr=std::shared\u ptr的模板;
模板
ptr制造(参数…参数){
返回std::使_共享(args…);
}
ptr p=制造(args);
你认为这些方法的优点/缺点是什么?还有更优雅的方式吗?

你可以使用自动驾驶

auto p = std::make_shared<MyClass>(args);
auto p=std::使_共享(args);
你认为这些方法的优点/缺点是什么

它们太可怕了。相当于

#define R return
我看到了,因为有人懒得写
return

问题是,在软件开发中,大部分时间都花在思考如何做和代码维护上。通过使用这样的宏,您正在削弱维护工作,使维护人员的生活变得更加困难

还有更优雅的方式吗

使用合适的IDE,将“自动完成”设置为在一个字符上触发,然后选择您需要的任何内容


好的,我跳过了模板示例

您正在引入新的符号,并编写typedef以使自己编写的代码更少。最好的代码是未编写的代码

如果有人打开您的源文件,他还必须打开您定义这些函数和模板别名的标题。这增加了维护成本

看到std::shared_ptr,人们立刻知道它是什么


另外,对于
std::unique\u ptr
,您会怎么做?添加
make1
ptr1

如前所述,使用自动和扩展名称空间

using namespace std;
....

auto allocatedInstance = make_shared<Type>(args);
使用名称空间std;
....
自动分配状态=使共享(args);
使用std::make_shared;//毕竟,在文件范围内#包括
自动p=使_共享(a、b、c);
但就个人而言,我喜欢std::


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

模板函数应该是
template ptr make(Args&&…Args){return std::make_shared(std::forward(Args);}
,也就是说,奇怪的是,有人开始尝试键入一个相当专业的利基工具的名称,如
std::shared\u ptr
。它可能只是被过度使用了。不要导入整个名称空间<代码>使用std::使_共享有时在文件/函数范围内是可以的:
使用名称空间std几乎不值得维护,因为现在
std
中的每个新符号都可能与全局符号(ik)冲突。如果您同时拥有这两个名称空间,也许吧,但我们现在有内联名称空间来满足大多数此类需求。。。但这家伙想知道如何缩短代码,嘘。。。