C ++ / WinRT或WinRT / ABI是否具有_declspec(novtable)的CRTP“功能”?

时间:2019-03-24 08:43:38

标签: c++-winrt

来自ATL(活动模板库),它是一个抽象基本类的共同类,因此使用ATL_NO_VTABLE(_declspec(novtable))标记该共同类是安全的。因此,您只能使用Microsoft C ++编译器来使用ATL类。 C ++ / winRT或WinRT / ABI是否也为其他C ++编译器提供了CRTP-“功能”?如果可以的话,如何运作?

1 个答案:

答案 0 :(得分:1)

__declspec(novtable)是与CRTP不相关的实现细节。它几乎像其他任何C或C ++库中的任何其他平台特定实现一样,在C ++ / WinRT中进行处理:通过使用预处理程序宏。您可以在 中找到以下内容:

#if defined(_MSC_VER)
...
#define WINRT_NOVTABLE __declspec(novtable)
...
#else
...
#define WINRT_NOVTABLE
...
#endif

命名空间winrt::impl中相应的基本类型已适当标记为WINRT_NOVTABLE