如何将数据传递给引用包装器
How to pass data to reference wrapper
考虑以下代码:
//option no 1
struct foo{
foo(baz &b) : _b(b){}
std::reference_wrapper<baz> _b;
};
//option no 2
struct bar{
bar(std::reference_wrapper<baz> b) : _b(b){}
std::reference_wrapper<baz> _b;
};
我想知道初始化 foo
和 bar
之间是否存在任何实际差异。如果是这样,每种解决方案的优缺点是什么,应该首选哪种?
转换运算符的类型至少有区别:
struct tobaz
{
operator baz&() const { static baz b; return b; }
};
然后
foo{tobaz()}; // Compile
bar{tobaz()}; // Won't compile
因为只能进行一次用户转换。
operator std::reference_wrapper<baz>()
.
结构的另一端会发生错误
考虑以下代码:
//option no 1
struct foo{
foo(baz &b) : _b(b){}
std::reference_wrapper<baz> _b;
};
//option no 2
struct bar{
bar(std::reference_wrapper<baz> b) : _b(b){}
std::reference_wrapper<baz> _b;
};
我想知道初始化 foo
和 bar
之间是否存在任何实际差异。如果是这样,每种解决方案的优缺点是什么,应该首选哪种?
转换运算符的类型至少有区别:
struct tobaz
{
operator baz&() const { static baz b; return b; }
};
然后
foo{tobaz()}; // Compile
bar{tobaz()}; // Won't compile
因为只能进行一次用户转换。
operator std::reference_wrapper<baz>()
.