我希望创建一个对象A,该对象可以通过复制或移动可变数量的B对象来构造。像这样:
class B {}
class A {
A(B&& operand1, B&& operand2, ... B&& operandk) {
// move construct A
}
A(B& operand1, B& operand2, ... B& operandk) {
// copy construct B
}
}
我似乎无法找到一种将r值引用存储在任何可迭代容器中的方法来实现此目的。我已经读过,std::reference_wrapper
但似乎不允许使用r值。有没有办法完成这样的事情,或者有理由我根本不应该尝试这样做吗?非常感谢。
当您需要拥有一个对象时,只需按值即可。调用者可以根据是否需要保留要提供给构造函数的对象的副本来移动-构造或复制-构造参数。
而且-甚至更好-通过这种方式,他们可以移动构造某些对象,而不是其他对象。
在构造函数中,您可以A
使用B
初始化器列表中的对象自由移动构造子对象,因为您知道调用者已经复制了需要复制的任何内容。
要接受可变数量的参数,只需让您的构造函数成为接受参数包的模板,然后按值输入参数即可:
class A {
public:
template <typename... T>
A(T ...);
};
在实现中,您可以B
根据每个参数移动构造a之后执行任何所需的操作。如果不能全部使用参数来创建,这将导致构造器模板无法实例化B
:
template <typename... T>
A::A(T ... args) {
(... , do_something_with_a_B(B{std::move(args)}));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句