[英]Sum the components of a tuple up by using std::get, std::tuple_size, std::tuple_element
[英]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 :: function,第二個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的元組,我得到的是帶有ranged-base的),第二個成員保持為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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.