在下面的代码段中,MyClass
有一个返回其共享指针的静态方法。为了简化代码,我们对MyClassPtr
使用别名std::shared_ptr<MyClass>
。
但是,为了实现这一点,我们在声明共享指针别名之前声明该类,然后在实际的类声明之后。它看起来很冗长。
是否有某种方法可以重新组织代码以便
MyClassPtr
别名(在整个项目中共享)MyClass
两次以下代码:
class MyClass;
using MyClassPtr = std::shared_ptr<MyClass>;
class MyClass {
public:
static MyClassPtr createMyClassInstance();
private:
/*Other members & methods*/
}
我对当前的实现没问题。但如果能够改进代码,我想寻求有经验的人的建议。
答案 0 :(得分:3)
你的问题有点模糊,因为你问的是代码如何简化,但是你没有提供任何真正的代码,只提供类定义的大纲。相反,我尝试回答关于如何改进代码的更明智的问题。我建议
避免别名MyClassPtr
,它不是真的必要(如果使用auto
则不应该使用它)但更重要的是减少代码的冗长度和可读性,因为MyClassPtr
引用shared_ptr
的名称并不明显。
如果您坚持使用智能指针的简写,您可以在类定义之后定义此,从而避免前向声明
将MyClass::createMyClassInstance
重命名为更详细的内容,我建议MyClass::createSharedPtr
(不需要再次在函数名称中添加MyClass
。)
;
。因此,
class MyClass
{
public:
static std::shared_ptr<MyClass> createSharedPtr();
private:
/* Other members & methods */
};
using MyClassSharedPtr = std::shared_ptr<MyClass>; // optional
恕我直言,好的代码应该是不言自明的,因此不一定最简洁/简短,但必须避免冗余。
答案 1 :(得分:2)
使Ptr
成为会员类型:
class MyClass {
public:
using Ptr = std::shared_ptr<MyClass>;
static Ptr createMyClassInstance();
private:
/*Other members & method*/
};
// ...
MyClass::Ptr p = MyClass::createMyClassInstance();
答案 2 :(得分:0)
用auto:
替换返回类型class MyClass {
public:
static auto createMyClassInstance();
private:
/*Other members & method*/
}
Demo:
答案 3 :(得分:0)
是否有某种方法可以重新组织代码,以便
(1)保留MyClassPtr别名(它在整个项目中共享)
(2)没有&#34;声明&#34; MyClass两次
您接受两次声明MyClassPtr
,您可以在课堂内声明它并且&#34;导出&#34;
#include <memory>
class MyClass
{
public:
using MyClassPtr = std::shared_ptr<MyClass>;
static MyClassPtr createMyClassInstance();
private:
/*Other members & methods*/
};
using MyClassPtr = MyClass::MyClassPtr;
int main()
{
MyClassPtr np { nullptr };
}