gpt4 book ai didi

c++ - 如何使用 std::get 在元组上赋值?

转载 作者:太空狗 更新时间:2023-10-29 21:16:56 24 4
gpt4 key购买 nike

我需要在我的代码中使用一个元组,以便能够方便地将三个不同类型的数据存储在一个 vector 中。也就是说,我有这样的东西:

std::vector<std::tuple<sf::Time, sf::Time, std::function<void()> > > m_timedFunctions;

其中第一个 sf::Time 表示我们应该多久调用一次 std::function,第二个 sf::Time 表示最后一次调用该函数的时间戳。目标是能够定期自动调用函数。

我在创建元组并将其插入到 vector 中没有问题,但由于某种原因,当我尝试使用 std::get<1>(u) 修改第二个 sf::Time 时,它只是不会发生。我可以完美地读取数据,但绝不允许我修改它。

这是我创建元组的方式:

void addTimedFunction(sf::Time freq, std::function<void()> f)
{
auto a = std::make_tuple(freq, sf::seconds(0), f);
m_timedFunctions.push_back(a);
}

但稍后如果我做这样的事情:std::get<1>(a) = sf::seconds(10); (其中 a 是来自 m_timedFunctions 的一个元组,我使用 ranged-base for 获得),第二个成员保持为 0。

我正在修改的整个代码部分:

void MainWindow::processTimedFunctions()
{
for(auto a : m_timedFunction)
{
sf::Time elapsed = m_clock.getElapsedTime();
sf::Time lastExec = std::get<1>(a);

sf::Time diff = elapsed - lastExec;

if( diff.asMilliseconds() >= std::get<0>(a).asMilliseconds())
{
std::get<1>(a) = sf::seconds(10); // m_clock.getElapsedTime(); // Update the last execution time
std::get<2>(a)(); // Call the linked function
}
}
}

如何有效地修改它?

最佳答案

这会创建您正在迭代的元素的拷贝:

for(auto a : m_timedFunction)

您对 a 所做的任何更改都不会影响容器。

要获取引用而不是拷贝,请使用:

for(auto &a : m_timedFunction)

关于c++ - 如何使用 std::get 在元组上赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34254633/

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