在unknow.h中有一段代码如下
    extern "C++"
    {
        MIDL_INTERFACE("00000000-0000-0000-C000-000000000046")
        IUnknown
        {
        public:
            BEGIN_INTERFACE
            virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) = 0;
            
            virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;
            
            virtual ULONG STDMETHODCALLTYPE Release( void) = 0;
    
            template<class Q>
     HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp)
     {
         return QueryInterface(__uuidof(Q), (void **)pp);
     }
            
            END_INTERFACE
        };
    } // extern C++
我把里面的宏套出来以后是
    extern "C++"
    {
        struct __declspec(uuid("00000000-0000-0000-C000-000000000046")) __declspec(novtable)
        IUnknown
        {
        public:
            BEGIN_INTERFACE
            virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) = 0;
            
            virtual ULONG STDMETHODCALLTYPE AddRef( void) = 0;
            
            virtual ULONG STDMETHODCALLTYPE Release( void) = 0;
    
            template<class Q>
     HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp)
     {
         return QueryInterface(__uuidof(Q), (void **)pp);
     }
            
            END_INTERFACE
        };
    } // extern C++
我的问题是,为什么上面是以struct来定义的IUNKNOW,而且,还可以在struct加上public修饰符呢?