问题标签 [std-variant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 尝试将值存储到映射中的 std::variant 时出现 std::bad_variant_access 错误
我正在使用 std::variant 将文件解析为映射(以支持两种类型的值),但我无法找出将值存储到映射中的正确方法。
我得到一个:std::bad_variant_access
what():意外索引
这是地图定义:
这是解析函数:
uint16_t 解析没有问题。
我试图更改变体的顺序,使其成为 std::variant<float,uint16_t> 然后在 else 中失败。所以我知道我访问变体的方式是错误的(或者可能是因为地图没有初始化?)但我不知道如何修复它。
我应该使用 std::visit 而不是 std::get 吗?如果是这样,如何?
任何帮助将不胜感激。
谢谢。
c++ - 为 std::variant 提供 operator==
我正在尝试为地图中定义的运算符创建一个operator==
运算符,std::variant
如下所示:
有人能告诉我为什么我的接线员不工作吗?
c++ - std::variant 的赋值运算符
我正在尝试使用 std::variant 将浮点数分配给我的 std::map 中的定义值。我以这种方式初始化了我的地图:
我正在尝试存档此操作:
如何将 std::map 键转换为浮点数以进行简单的算术运算?
c++ - 使用 std::variant<...> 时调用 BaseState 函数而不是 Derived 函数
我正在尝试使用最终状态机和 std::variant<..>
std::variant 将保存所有可能的状态状态将在 State 类中定义。
我想要的是有一个 BaseState 类,应该在其中处理“通用事件”。使用派生的 State 类处理特定的状态。
我的问题在于on_event
功能。
Basestate中的 Reset 有一个特定的,void on_event(const Reset &r);
而 LightOn 和 LightOff 中有一个更通用的void on_event(const Event &e);
(使用 Event = std::variant<Toggle,Reset>;)
但是当我这样做时
来自 LightOn 的 on_event 被调用,而不是来自 BaseState 的那个。
有没有办法实现:当 BaseState 函数可用于此特定事件时调用 BaseState 函数?
c++ - 在模板中使用 std::variant 的 emplace 函数
我正在尝试使用最终状态机和 std::variant<..>
std::variant 将保存所有可能的状态状态将在 State 类中定义。
我想将 std::monostate 作为第一种状态变体,以将其用作“不更改状态”值。所以定义是:第一种是std::monostate,第二种是fsm的初始状态。
由于 std::variant 被初始化为它的第一个元素,我想在构造函数中使用 emplace<1> 。
但这会产生编译时错误:
但是,当我在非模板代码中使用相同的构造时:
emplace 功能是否有使用限制?
c++ - Compare std::variant with int using C++20 <=> is not a constant expression
Since the std::variant
is not allowed to compare with one of its alternative types in the standard library, I am implementing the compare function using C++20 <=>
operator:
But when I testing the above function with my own defined std::variant
:
The second assertion couldn't compile, GCC says:
Why is v2 < 2
not a constant expression? or it's just a GCC bug? Weirder, when I change the second assertion to compare with double
, this can compile:
Update:
Clang can pass three assertions, but MSVC can only pass the third assertion, it seems MSVC also has a bug.
c++ - 我如何编写类似 std::variant 的开关之类的代码?
我有一些var = std::variant<std::monostate, a, b, c>
什么时候a, b, c
是一些类型。
如何在运行时检查var
包含什么类型?
在官方文档中,我发现如果var
包含a
类型的信息,我写std::get<b>(var)
了我得到一个异常。所以我想到了这个解决方案:
但它是如此复杂和丑陋!有没有更简单的方法来检查std::variant
包含什么类型?
c++ - 如何访问 std::variant 中的类型?
我需要构建一个可以具有多种类型的类的向量,如下所示:
这是头文件Field.h
:
当我尝试访问getName()
函数时,Visual Studio 不断给我以下消息错误:
E0135 类 "std::variant<Field, Fieldstd::string, Field>" 没有成员 "getName"
C2039 'getName': 不是 'std::variant<Field,Fieldstd::string,Field>' 的成员
但它工作得很好,如果我这样定义我的向量:
我怎样才能解决这个问题?
c++ - 默认构造 std::variant 中的所有类型并将它们放入 std::vector
我将如何制作一个std::vector
包含 a 中包含的所有类型的默认构造实例的 a std::variant
?
c++ - std::variant 类型的向量到 std::tuple
我正在研究 std::variant 类型的向量。有没有办法将它转换为给定 std::variants 所持有的值的 std::tuple ?
例如,我想要像这样的元组:
其中成员是向量中连续变体所持有的类型。