繁体   English   中英

如何使用其非默认选项之一直接初始化 C++ 变体?

[英]How to direct initialize a C++ variant with one of its non-default option?

考虑以下:

class Foo {
    [...]
public:
    Foo(int);
}

class Bar {
    [...]
public:
    Bar(int);
}

using MyVariant = std::variant<Foo,Bar>;

如何将MyVariant的实例直接初始化(即不涉及复制且不涉及Foo构建)作为Bar

std::in_place_type_t<Bar>类型的 a 标记作为第一个构造函数参数传递:

struct Foo
{
    Foo(int value)
    {
        std::cout << "Foo(" << value << ")\n";
    }
};

struct Bar
{
    Bar(int value)
    {
        std::cout << "Bar(" << value << ")\n";
    }

    Bar(Bar const&)
    {
        std::cout << "Bar(Bar const&)\n";
    }
    Bar& operator=(Bar const&)
    {
        std::cout << "Bar& operator=(Bar const&)\n";
    }
};

int main() {
    std::variant<Foo, Bar> var(std::in_place_type_t<Bar>{}, 1);
}

如果您更喜欢在std::variant的模板参数列表中传递类型的 position,则std::in_place_index_t将是替代的第一个参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM