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