gpt4 book ai didi

c++ - 在模板中使用 std::variant 的 emplace 函数

转载 作者:行者123 更新时间:2023-12-02 10:13:07 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Where and why do I have to put the “template” and “typename” keywords?

(8 个回答)


去年关闭。




我正在试验有限状态机和 std::variant<..>
std::variant 将保存所有可能的状态。状态将在 State 类中定义。
我希望将 std::monostate 作为第一种类型的 State 变体,以将其用作“不更改状态”值。
所以定义是:第一种类型是 std::monostate,第二种类型是 fsm 的初始状态。
由于 std::variant 被初始化为它的第一个元素,我想在构造函数中使用 emplace<1> 。

template <typename StateVariant>
class fsm
{
public:
StateVariant state;
fsm()
{
state.emplace<1>();
};
};

struct Initial{};
struct Running{};

using State = std::variant<std::monostate,Initial,Running>;

fsm<State> myFSM;
但这会导致编译时错误:
..\fsm_emplace.cpp: In constructor 'fsm<StateVariant>::fsm()':
..\fsm_emplace.cpp:15:20: error: expected primary-expression before ')' token
15 | state.emplace<1>();};
但是,当我在非模板代码中使用相同的构造时:
State myState;

void setup()
{
myState.emplace<1>();
}
emplace 函数有使用限制吗?

最佳答案

由于状态依赖于模板名称,您必须添加 template :

state.template emplace<1>();

关于c++ - 在模板中使用 std::variant 的 emplace 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62818040/

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