我浏览了一些Ubuntu的Mir示例,但偶然发现了我无法理解的代码。struct DemoServerConfiguration : mir::DefaultServerConfiguration{这是怎么回事“:mir::DefaultServerConfiguration ”?在这个结构里面有这个std::shared_ptr<msh::PlacementStrategy> the_shell_placement_strategy(){ return shell_placement_strategy( [this] { return std::make_shared<me::FullscreenPlacementStrategy>(the_display()); });}同样的故事,我不明白不清楚部分的语法:<msh::PlacementStrategy> the_shell_placement_strategy()和return shell_placement_strategy( [this] {再次在相同的结构内std::initializer_list<std::shared_ptr<mi::EventFilter> const> the_event_filters() override{ return filter_list;}为什么多个 嵌套?为什么那里有the_event_filters()?最后一块mir::run_mir(config, [&config, &wm](mir::DisplayServer&){ code});不清楚的部分(config, [&config, &wm](mir::DisplayServer&)); (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 第一个例子这只是从内部类型继承的一种情况:class C{public: class Internal { };};class D : public C::Internal{ // D derives from Internal class, which is a member of C class};::是范围解析的运算符。表达式A::B的含义是:“B,它是A的成员”。 ::适用于类,结构和 namespace 。第二个例子这有点复杂。std::shared_ptr<msh::PlacementStrategy> the_shell_placement_strategy(){ return shell_placement_strategy( [this] { return std::make_shared<me::FullscreenPlacementStrategy>(the_display()); });}让我们将其分解为几个部分。std::shared_ptr<msh::PlacementStrategy> the_shell_placement_strategy()这是一个函数/方法the_shell_placement_strategy,它返回std::shared_ptr类型的结果(使用msh::PlacementStrategy参数化的泛型类-请参见上一点)。return shell_placement_strategy(它返回调用shell_placement_strategy的结果... [this] { return std::make_shared<me::FullscreenPlacementStrategy>(the_display()); }...以lambda(无名函数)为参数。该无名函数想要访问this(因此为[this]),并将调用结果返回给通用函数std::make_shared,参数化为me::FulscreenPlacementStrategy并以the_display()方法/函数的结果作为参数进行调用。您可能在其他地方阅读了有关lambda的信息,但我将提供简短的解释供引用:[access-specification](parameters){ body }在哪里: access-specification定义lambda和局部变量之间的关系。例如,[a]意味着lambda将可以按值访问局部变量a; [&a]-相同,但仅供引用; [&]-lambda将可以通过引用访问所有局部变量,依此类推。 parameters-函数参数的常规定义 body-lambda的常规主体。 Lambda表示法是C++11标准的一部分。最后一个例子您现在应该能够解释此示例:mir::run_mir(config, [&config, &wm](mir::DisplayServer&){ code});那是:调用run_mir方法(或函数),它是mir类(或 namespace )的一部分; 具有两个参数:config和一个接受两个参数的函数; config作为第一个参数传递; 第二个参数传递一个lambda。 现在,lambda:它想通过引用访问两个局部变量:config和wm 它接受一个类型为mir::DisplayServer&的参数(此参数没有名称,因此看来它实际上并没有使用它)会<code> :)关于c++ - 语法说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17214075/ (adsbygoogle = window.adsbygoogle || []).push({}); 10-10 07:48