如何在元组上使用std::get赋值
How to assign a value using std::get on a tuple?
我需要在代码中使用元组,以便能够方便地在向量中存储三个不同类型的数据。也就是说,我有这样的东西:
std::vector<std::tuple<sf::Time, sf::Time, std::function<void()> > > m_timedFunctions;
其中,第一个sf::Time表示我们应该多久调用一次std::函数,第二个sf::Time表示最后一次调用该函数的时间戳。目标是能够以规则的间隔自动调用函数。
创建元组并将其插入向量中没有问题,但由于某种原因,当我尝试使用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的元组,我得到它的基为range),则第二个成员保持在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)
相关文章:
- std::get like (partial) template specialization
- 为什么 ADL 不能使用 std::get 解析为正确的函数
- 为什么不能使用std :: get()获得向量的成员
- std::get from teplate argument
- static_cast 使用 std::get 与枚举类时必需的
- 为什么 std::get 不适用于变量?
- std :: is_same在比较std :: tuple_element和declType(std :: get)时返
- 完美地从 std::get 中获取元组值
- 元组 std::get() 不适用于变量定义的常量
- 为什么 std::get 没有一个接受转发引用的签名
- std::is_same and std::get together
- 使用派生自 'std::tuple' 的元素在 'std::tuple' 上调用 'std::get' - 格式不正确
- 如何使用 std::get 作为 boost-multi-index 容器键的global_fun
- 让"std::get"与SFINAE玩得很好
- 从std::tuple派生时出现混乱,无法处理std::get
- 关于 std::tuple 对象上 std:get() 的返回类型的混淆
- 使用 std::get 作为 std::transform 的参数
- std::get 使用枚举类作为模板参数
- std::get 在给定 6 个整数元组时失败
- volatile and const volatile std::tuple and std::get