无法在 std::variant 中采用相同类型

2024-04-16

我正在使用 c++17,并且想编写这样的代码,

#include <variant>
typedef int NewInt;
int main() {
    std::variant<NewInt, int> n = 1;
}

但它会发出编译错误,

po.cpp: In function ‘int main()’:
po.cpp:5:35: error: conversion from ‘int’ to non-scalar type ‘std::variant<int, int>’ requested
     std::variant<NewInt, int> n = 1;
                               ^

我怎样才能定义这样的类型std::variant<NewInt, int>或者这是不可能的?


类型别名只是现有类型的另一个名称,而不是新类型。所以你有两个整数的变体。虽然这是允许的,但您必须明确解决歧义。std::variant有一个合适的构造函数:

std::variant<NewInt, int> n{ std::in_place_index<0>, 1 };

上面将构造第一个整数成员(你的NewInt)。如果你想构建第二个,这是显而易见的:

std::variant<NewInt, int> n{ std::in_place_index<1>, 1 };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 std::variant 中采用相同类型 的相关文章

随机推荐