流畅的界面模式和std :: unique_ptr

Cri*_*ano 4 c++ design-patterns fluent-interface unique-ptr c++11

我正在使用流畅的界面模式.

首先,我写了类似的东西:

class C
{
public:
    C() { }

    C* inParam1(int arg1){ param1 = arg1; return this; }
    C* inParam2(int arg2){ param2 = arg2; return this; }

private:
    int param1;
    int param2;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用std :: unique_ptr,但后来我意识到我不知道如何沿着链"移动"指针(this).我尝试过类似的东西:

return std::move(this);
Run Code Online (Sandbox Code Playgroud)

那当然不行.

我怎样才能做到这一点?做这样的事有什么问题吗?

为了回复如下评论:"不要使用指针":没有(还)任何实际原因,因为我用指针做这个,只是我想知道是否可以这样做.

Ben*_*ley 10

为什么你必须返回指针?

class C
{
public:
    C create() { return C(); }

    C & inParam1(int arg1){ param1 = arg1; return *this; }
    C & inParam2(int arg2){ param2 = arg2; return *this; }

private:
    C() { }
    int param1;
    int param2;
};
Run Code Online (Sandbox Code Playgroud)

我必须承认,我不理解该创建函数的目的,或者为什么构造函数是私有的,或者你实际上是如何创建这个类的对象.根据我的理解,该课程应该是这样的:

class C
{
public:
    C() {}

    C & inParam1(int arg1){ param1 = arg1; return *this; }
    C & inParam2(int arg2){ param2 = arg2; return *this; }

private:        
    int param1;
    int param2;
};
Run Code Online (Sandbox Code Playgroud)

像这样使用:

int main()
{
    C().inParam1(10).inParam2(20).whatever();
}
Run Code Online (Sandbox Code Playgroud)