【问题标题】:Has C++/WinRT or WinRT/ABI a CRTP "feature" with _declspec(novtable)?C++/WinRT 或 WinRT/ABI 是否具有 _declspec(novtable) 的 CRTP“功能”?
【发布时间】: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


    【解决方案1】:

    __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

    【讨论】:

    • 如果需要,请直接使用__declspec(novtable)(或定义自己的宏)。 C++/WinRT 宏不适用于公共用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多