2013-09-28 71 views
10

std::has_virtual_destructor和類似的檢查如何實施?我試着在Visual Studio中查看type_traits頭文件,但是有太多的宏和模板甚至沒有想法。這張支票可以用任何合理簡單的形式表達嗎?我想至少知道它的工作原理,因爲現在我不知道。如何實現std :: has_virtual_destructor?

+7

這是編譯器的魔力。你不能在標準的C++中實現它。 Boost提供了這個特徵類,它們使用編譯器特定的內在函數。檢查[此標題](http://www.boost.org/doc/libs/1_53_0/boost/type_traits/intrinsics.hpp)。 – jrok

+0

@jrok:你確定嗎?爲什麼它不是一個編譯器關鍵字呢?順便說一句,我非常確定Boost在C++ 0x編譯器之前。 –

+0

查看更新的評論。 – jrok

回答

13

許多類型特徵需要編譯器的魔力:這些特徵本質上爲不同編譯器提供的鉤子提供了一個庫接口。編譯器如何實現這些鉤子完全取決於它們,並且沒有一致的接口。

在本次會議上討論瞭如何增加對未來版本的反思,如果像std::has_virtual_destructor<T>這樣的特徵可能最終導致圖書館實施。然而,在反思之後會出現一段時間。

+1

這麼多年來他們爲什麼沒有標準化這些鉤子的界面呢? –

+0

@VioletGiraffe他們不是那麼做的嗎? – jrok

+0

@VioletGiraffe:你可以認爲特質界面是鉤子。實際上,編譯器廠商有不同的方法來實際公開功能,雖然我在很多年前曾問過創建一個一致的接口,但編譯器供應商表示,必須遵守特定的方法將會過於束縛。 –

相關問題