gpt4 book ai didi

c++ - 带按值传递参数的 std::forward

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:12 24 4
gpt4 key购买 nike

我在阅读有关封装多态性的文章时遇到了一段这样的代码:

template <typename T>
struct Model<T> : Concept
{
Model<T>(T impl) :
mImpl(std::forward<T>(impl))
{

}
virtual Concept* clone() const override
{
return new Model<T>(mImpl)
}

virtual void operator (const LogMessage::Meta& meta, const std::string& message) override
{
mImpl(meta, message);
}

T mImpl;
};

在模型构造函数中转发impl有什么意义?

如果按值传递参数,转发参数是否有意义?

最佳答案

如果Model<T>其中 T是左值引用类型(例如 X& )是合法的(根据 Model 的文档),然后 forward是在这里使用的正确工具。否则(如果 T 应该总是一个对象类型),move是正确的工具。

也就是说,clone成员函数使它看起来像T应该只是一个对象类型。所以move将是一个更好的工具在这里使用。在这种情况下 forward从技术上讲并没有错,只是令人困惑,因为它提出了 OP 提出的问题。

关于c++ - 带按值传递参数的 std::forward,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30141707/

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