簡體   English   中英

如何獲得對變量值的引用?

[英]How to get a reference to variant’s value?

我有std::variant ,其中所有類均源自同一基數。 我想將變體轉換為基礎。

return std::visit( []( const Base& b ) { return b; }, v );

這會編譯,但會發出警告C4172:局部變量或臨時變量的返回地址

有沒有一種方法可以訪問std::variant ,而不進行本地或臨時副本?

或者,如果不可能,如何將值static_castvoid*以便可以使用static_cast

更新:我認為該示例應該很明顯,但是事實並非如此,這是完整的副本:

#include <variant>

struct Base {};
struct A : Base {};
struct B : Base {};

const Base& cast( const std::variant<A, B>& v )
{
    return std::visit( []( Base const& b ) { return b; }, v );
}

int main()
{
    std::variant<A, B> v{ A{} };
    const auto& b = cast( v );
}

Lambda具有返回類型推導,但是它們通過值推導返回類型。 好像它們是一個返回auto而不是decltype(auto)的函數。 如果要通過引用返回,則需要指定返回類型。

因此, [](const Base& b) { return b; } [](const Base& b) { return b; }按值返回,復制b 明確指定返回類型,以強制其通過引用返回:

const Base& cast( const std::variant<A, B>& v )
{
    return std::visit( []( Base const& b ) -> Base const& { return b; }, v );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM