gpt4 book ai didi

c++ - std::variant 重复类型导致没有合适的构造函数错误(clang-1300.0.29.3)

转载 作者:行者123 更新时间:2023-12-04 14:48:12 26 4
gpt4 key购买 nike

只是想知道这是否是 std::variant 的预期行为,以及这种行为的原因。
重现错误的简化代码如下:

double d= 1.0;
std::variant<std::monostate, double, double> v(d);
错误信息如下所示:
no suitable constructor exists to convert from "double" to "std::__1::variant<std::__1::monostate, std::__1::remove_cv_t<std::__1::remove_reference_t<double &>>, std::__1::remove_cv_t<std::__1::remove_reference_t<double &>>>"C/C++(415)
我现在找到的一个解决方案是创建一个元函数,从变体类型中删除重复项,然后使用类型 double 的变量进行构造。 .
IE。
distinct<std::variant<std::monostate, double, double>>v(d);
//distinct_t<std::variant<std::monostate, double, double>> -> std::variant<std::monostate, double>
如果有更好的解决方案,也请告诉我。

最佳答案

std::variant 中有多个相同的类型被允许。但是,当 std::variant 的构造函数被调用,重载决议被执行以确定它需要保存哪种变体类型。如果您有 2 个相同的类型,则存在歧义,因此您会收到错误消息。
您可以明确指定要使用的类型

std::variant<std::monostate, double, double> v(std::in_place_index<1>, d); 
这将使用第一个 doublestd::variant .

关于c++ - std::variant 重复类型导致没有合适的构造函数错误(clang-1300.0.29.3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69592239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com