類靜態方法我有一個基類Vehicle
和欲填充的Runnable
亞類(Motorcycle
,Car
,Airplane
),使得我可以通過在地圖上進行迭代,並調用靜態方法Motorcycle::run()
,Car::run()
一個std::unordered_map
,Airplane::run()
。如何填充std::unordered_map
?C++存儲在unordered_map
1
A
回答
1
有兩種方法。
難的方法:
靜態函數不是虛擬的,你必須存儲的Mororcyle
,Car
和Airplane
boost::variant
。
typedef boost::variant< Motorcycle, Car, Airplane > VRunnable; // variant
unordered_map<key_t, VRunnable> m;
當你遍歷你unorderd_map
,你便可以識別物體的類型,並調用正確類型的靜態成員。您可以通過使用訪問者類來完成此操作,該類定義了變體中操作超載的操作類型。
它可以工作,但考慮到你想要做什麼,它更加繁瑣。實際上,在這裏你並沒有採用Runnable
繼承和多態。
聰明的辦法:
更簡單的方法是將有一個虛擬成員的Runnable :: V運行()調用每一個Runnable的子類的approporiate靜態的run()。然後,您可以簡單地遍歷您的無序映射,然後調用虛函數:然後該對象將調用正確的靜態成員。
unordered_map<key_t, Runnable> m;
for (auto x: m)
f.second.vrun();
0
在C++中,不能多態地調用靜態方法。但是,您可以調用常規方法並調用靜態方法它。
struct Runnable
{
virtual void run_me() = 0;
};
class Car : public Runnable
{
public:
virtual void run_me() { run(); }
static void run();
};
相關問題
- 1. unordered_map的存儲位置
- 2. 是unordered_set作爲key存儲在unordered_map
- 3. :在unordered_map(C++)
- 4. 存儲元素VS它們存儲在一個unordered_map
- 5. unordered_map C++
- 6. C++ unordered_map其中鍵也unordered_map
- 7. C++ unordered_map問題
- 8. unordered_map對值C++
- 9. C++ std :: unordered_map
- 10. 在C++中同步unordered_map
- 11. C++ compare unordered_map hash keys
- 12. 向量的C++ unordered_map
- 13. 創建2D unordered_map C++
- 14. 數據如何存儲/我們如何獲取存儲在unordered_map存儲桶中的數據11
- 15. c#to C++ dictionary unordered_map results
- 16. 存儲在用C
- 17. C++ boost unordered_map - 確定密鑰是否存在於容器中
- 18. 插入unordered_map的unordered_map?
- 19. std :: tr1 :: unordered_map的C++相等
- 20. C++中的unordered_map錯誤?
- 21. unordered_map插入錯誤C++
- 22. unordered_map中operator []的C++特化
- 23. C++ unordered_map插入到向量
- 24. C++ unordered_map異常安全
- 25. C++,如何通過unordered_map
- 26. C++的std :: unordered_map複雜
- 27. 浮點異常存儲東西放到unordered_map
- 28. 我們可以存儲unordered_map <T> ::迭代器嗎?
- 29. 在C++中將csv讀入unordered_map
- 30. 在C++中預分配桶unordered_map
你在做這個而不是使用多態性的原因是什麼?可能有一個更容易/更好的方式來做你想做的事情。 – Velox 2014-09-29 20:52:44
是的,指定你想要做什麼可能確實有助於找到更好的解決方案。 – Svalorzen 2014-09-29 20:54:08
從給出的信息幾乎可以保證有一個設計問題,一方面你有一個類的實例,另一方面你有靜態函數,你希望能夠調用,從而放棄對象關係。 – Ylisar 2014-09-29 20:55:54