我有一个小的lambda函数,它将查找并返回QTreeWidgetItem。但是,如果找不到给定的项目,则它将返回nullptr。但是,如果我尝试对其进行编译,则会给我一个错误。

功能:

auto takeTopLevelItem = []( QTreeWidget* aTreeWidget, const QString& aText )
{
    const int count = aTreeWidget->topLevelItemCount();
    for ( int index = 0; index < count; ++index )
    {
        auto item = aTreeWidget->topLevelItem( index );
        if ( item->text( 0 ) == aText )
        {
            return aTreeWidget->takeTopLevelItem( index );
        }
    }
    return nullptr; // This causes a compilation error.
};

错误:



我对此进行了更改,现在可以编译了:
return (QTreeWidgetItem*)( nullptr );

但我想避免使用这种语法。我该如何解决?

我使用Visual Studio 2012

最佳答案

您可以添加一个显式的返回类型注释:

auto takeTopLevelItem = []( ... ) -> QTreeWidgetItem*
{
    // ...
}

这样nullptr将被正确转换为您的指针类型。之所以会出现此错误,是因为lambda假定不进行任何转换,并将nullptr_t视为合法的替代返回类型。

作为旁注,请考虑改为使用(std::)optional。指针的可为空性可用于表示缺少的返回值,但这并不意味着一定如此。

关于c++11 - 如何从Lambda函数返回nullptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30783007/

10-12 03:22
查看更多