2013-09-28 43 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:你可以认为特质界面是钩子。实际上,编译器厂商有不同的方法来实际公开功能,虽然我在很多年前曾问过创建一个一致的接口,但编译器供应商表示,必须遵守特定的方法将会过于束缚。 –

相关问题