gpt4 book ai didi

C++11:使用右值引用实现装饰器的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:31 24 4
gpt4 key购买 nike

我正在开发一个新版本的 CLI 实用程序,它可以生成访问器并希望添加一个装饰功能。

为了实现它,我想知道在 C++ 和 C++11 中实现装饰器的最佳方法是什么。

比如有这样一个接口(interface):

class IHello
{
public:
virtual void hello(std::string name) = 0;
};

我有两种可能性,要么我再次复制参数 name 以将其传递给对象,要么我创建一个具有 std::move 语义的右值引用。

因此我有两个不同的装饰器。复制第一个传递参数:

class HelloCopy : public IHello
{
public:
HelloCopy(IHello& instance)
:instance (instance)
{
}

virtual void hello(std::string name) override
{
this->instance.hello(name);
}

private:
IHello& instance;
};

右值引用的第二个传递参数:

class HelloRValue : public IHello
{
public:
HelloRValue(IHello& instance)
:instance (instance)
{
}

virtual void hello(std::string name) override
{
this->instance.hello(std::move(name));
}

private:
IHello& instance;
};

我的问题是:实现装饰器的最佳(最有效)方法是什么?

我也可以制作装饰方法的参数和右值引用,但由于我想遵守接口(interface)(因此显式覆盖),我无法更改它。

最佳答案

您似乎误解了移动的真正含义:

移动只是更好的复制。

因此,移动永远不会比拷贝差,如果类型包含外部数据,它总是更快(假设有一个健全的移动构造函数)。

关于C++11:使用右值引用实现装饰器的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com