很簡單,這段代碼有什麼問題?C++:在multiset中插入帶std :: function的元組,並保留一個訂單
typedef std::function<double()> Event;
typedef std::tuple <double, std::function<double()>> Event_handle;
std::multiset <Event_handle> event_multiset;
std::vector <Event_handle> event_vector;
void add_event_handler(double time, Event func_object)
{
// multiset version gives an error
// event_multiset.insert (std::make_tuple(time, func_object));
// vector is ok
event_vector.push_back(std::make_tuple(time, func_object));
}
使用g++ 4.7.2
編譯 - 與命令只是g++ -std=c++11 main.cpp
我爲什麼要這麼做?
程序在實時運行和add_even_handler
功能包括一個名爲time
double
類型的值(注意這裏time
變量無關,與時鐘或實際時間,它的類型是雙重的只是越來越對象) 。因此,當用戶添加某個事件時,它將在特定時間被調用。
該標準下的多容器容器將按某種順序(通常如果不是總是,則爲std::less<T>
)整理對象。然後在容器上循環,我可以通過增加變量double time
的變化來調用Event
。
什麼問題?
由於KyleC指出(見他的答案),std::function<>
不是由編譯器在什麼進程理解爲訂購
我如何已經克服了這個問題
你學到新的東西每天。上面的代碼是通過最初混合std::multiset
和std::tuple
來解決問題的結果。 std::map<T,S>
或std::multimap<T,S>
也按相關聯的key
排序,在這種情況下其類型爲double
,默認情況下該標準再次爲std::less<T>
。因此,而不是上面的,我已經做了以下
std::multimap <double, event> event_map;
void add_event_handler(double time, Event func_object)
{
// multimap is ok
event_map.insert(std::make_pair(time,func_object));
}
這僅僅是寫在這裏的事件類似的東西,它可以幫助的人,雖然很明顯,但仍然。
你能發佈錯誤的相關部分嗎? –
@KyleC快速問題,你如何輸出編譯器錯誤到g ++中的文本文件? – woosah