我正在使用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>
的类型,还是不可能?
答案 0 :(得分:10)
类型别名只是现有类型的另一个名称,而不是新类型。所以你有两个整数的变体。虽然它是允许的,但你必须明确地解决歧义。 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 };