C++实现“隐藏实现,开放接口”的方案

2020-01-06 13:23:11王冬梅
  • //Returns:  // int - 返回ID 
  • //Remarks:  // ... 
  • //author: luoweifu  //--------------------------------------------------------------- 
  • virtual int GetId() = 0;   
  • //---------------------------------------------------------------  //function:  
  • // SetId 设置ID  //Access: 
  • // virtual public   //Parameter: 
  • // [in] int id - 要设置的ID  //Returns: 
  • // void -   //Remarks: 
  • // ...  //author: luoweifu 
  • //---------------------------------------------------------------  virtual void SetId(int id) = 0; 
  •   }; 

    提供C接口

    从上面的代码我们可以看到IPage可以由IDocument创建,ITextUnit可以由IPage创建。那问题来了,IDocument由谁来创建呢?这时我们可以提供两个全局的函数CreateDoc和DestroyDoc用来创建和销毁IDocument的对象指针,这两个函数是全局函数(C类型的函数),我们需要为其提供C的导出接口(这很重要)。其接口定义如下:

     

     
    1. #pragma once   
    2. #include "IDocument.h"  #include "IPage.h" 
    3. #include "ITextUnit.h"   
    4.   //=============================================================== 
    5. //要导出静态库时,导出库的工程和使用库的工程都要加预编译宏EXPORT_STATIC  //要导出动态库时,导出库的工程要加预编译宏EXPORT_STATIC,使用库的工程不用