C++中mutex_wrapped的来源、作用及相关示例的技术问询
C++泛型lambda示例相关疑问
原教程中的相关内容如下:
使用泛型lambda的一个重要原因是用于访问语法。
boost::variant<int, double> value; apply_visitor(value, [&](auto&& e){ std::cout << e; });此处我们以多态方式进行访问;但在其他场景下,我们传入的类型名称并不重要:
mutex_wrapped<std::ostream&> os = std::cout; os.write([&](auto&& os){ os << "hello world\n"; });重复书写std::ostream&这类类型属于冗余,就像每次使用变量时都必须声明其类型一样。此处我们创建的是一个访问器,但并非多态访问器;使用auto的原因与在范围for循环中使用auto的原因相同。
针对第一个示例,实际运行时必须交换操作数才能正常执行:
boost::variant<int, double> value; boost::apply_visitor( [&](auto&& e){ std::cout << e; }, value );
推测这是由于教程编写后Boost库的API发生了变更。
但对于第二个示例,我找不到mutex_wrapped的来源,也无法理解接收lambda的write()方法的作用——通常write()应该接收const char* s, streamsize n类型的参数。请问第二个示例中的mutex_wrapped是否是一个虚构类?即该类拥有一个接收lambda的write方法,会将被包装的流作为参数传入并执行该lambda?
内容的提问来源于stack exchange,提问作者Motomotes
相关产品推荐
相关产品推荐

