std::has_virtual_destructor
和類似的檢查如何實施?我試着在Visual Studio中查看type_traits
頭文件,但是有太多的宏和模板甚至沒有想法。這張支票可以用任何合理簡單的形式表達嗎?我想至少知道它的工作原理,因爲現在我不知道。如何實現std :: has_virtual_destructor?
回答
許多類型特徵需要編譯器的魔力:這些特徵本質上爲不同編譯器提供的鉤子提供了一個庫接口。編譯器如何實現這些鉤子完全取決於它們,並且沒有一致的接口。
在本次會議上討論瞭如何增加對未來版本的反思,如果像std::has_virtual_destructor<T>
這樣的特徵可能最終導致圖書館實施。然而,在反思之後會出現一段時間。
這麼多年來他們爲什麼沒有標準化這些鉤子的界面呢? –
@VioletGiraffe他們不是那麼做的嗎? – jrok
@VioletGiraffe:你可以認爲特質界面是鉤子。實際上,編譯器廠商有不同的方法來實際公開功能,雖然我在很多年前曾問過創建一個一致的接口,但編譯器供應商表示,必須遵守特定的方法將會過於束縛。 –
- 1. std :: experimental :: source_location如何實現?
- 2. std :: vector :: swap如何實現?
- 3. std :: lower_bound()實現
- 4. 實現std :: iterator
- 5. 如何用std算法重新實現?
- 6. std :: tuple是如何實現的?
- 7. 如何實現std :: vector insert? C++
- 8. 如何用std :: vector實現堆棧?
- 9. 如何實現std-like迭代器的自定義實現?
- 10. C++ 11如何實現`std :: string ToString(std :: tuple <Args...>&t)`?
- 11. 的std ::移動實現
- 12. std :: list實現&指針arithemetic。
- 13. C++ 98/03 std :: is_constructible實現
- 14. SIMD std :: nth_element的實現
- 15. 怎樣的std :: unordered_map實現
- 16. std :: ignore的可能實現
- 17. 如何實現運算符>>(std :: istream&,std :: array <char, N>&)?
- 18. 如何使用std :: is_integral <>選擇實現?
- 19. 如何實現CString哈希函數與std :: unordered_map一起使用?
- 20. 如何在不進行輪詢的情況下實現std :: when_any?
- 21. 如何實現類似於std :: vector的自定義類
- 22. 如何使用std :: shared_ptr實現緩存管理器?
- 23. std :: sort如何僅使用迭代器實現交換操作?
- 24. std :: vector :: push_back(T &&值)是如何實現的?
- 25. 如何實現的std ::哈希模板類
- 26. 我們應該如何實現std :: error_code兼容的API?
- 27. 使用std libs實現Java TFTP - 如何確認數據包?
- 28. 如何在C++中使用std :: function實現戰略模式
- 29. std :: string ::替換標準實現?
- 30. 是否有查找表的std實現?
這是編譯器的魔力。你不能在標準的C++中實現它。 Boost提供了這個特徵類,它們使用編譯器特定的內在函數。檢查[此標題](http://www.boost.org/doc/libs/1_53_0/boost/type_traits/intrinsics.hpp)。 – jrok
@jrok:你確定嗎?爲什麼它不是一個編譯器關鍵字呢?順便說一句,我非常確定Boost在C++ 0x編譯器之前。 –
查看更新的評論。 – jrok