【发布时间】:2019-03-24 21:51:16
【问题描述】:
来自 ATL(活动模板库)的 coclass 是一个抽象基类,因此使用 ATL_NO_VTABLE (_declspec(novtable)) 标记 coclass 是安全的。因此,您只能使用 Microsoft C++ 编译器来使用 ATL 类。 C++/winRT 或 WinRT/ABI 这样的 CRTP-“功能”也适用于其他 C++ 编译器吗?如果,它是如何工作的?
【问题讨论】:
标签: c++-winrt
来自 ATL(活动模板库)的 coclass 是一个抽象基类,因此使用 ATL_NO_VTABLE (_declspec(novtable)) 标记 coclass 是安全的。因此,您只能使用 Microsoft C++ 编译器来使用 ATL 类。 C++/winRT 或 WinRT/ABI 这样的 CRTP-“功能”也适用于其他 C++ 编译器吗?如果,它是如何工作的?
【问题讨论】:
标签: c++-winrt
__declspec(novtable) 是一个实现细节,与CRTP 无关。它在 C++/WinRT 中处理,就像几乎任何其他 C 或 C++ 库中的任何其他平台特定实现一样:通过使用预处理器宏。您将在
#if defined(_MSC_VER) ... #define WINRT_NOVTABLE __declspec(novtable) ... #else ... #define WINRT_NOVTABLE ... #endif
命名空间winrt::impl 中的相应基本类型被适当地标记为WINRT_NOVTABLE。
【讨论】: