我正在使用 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 };
关于c++ - 无法在 std::variant 中采用相同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47858965/