2016-09-22 109 views
0

我有幾個函數來初始化一個接口指針,每個函數初始化特定版本的指針。現在我必須將這些功能變成一個通用功能。將多個功能組合到單個通用功能

bool init_9(MSTSCLib::IMsRdpClient9* iface) 
{ 
    iface->putSomeData1(); 
    iface->putSomeData2(); 
    iface->putSomeData3(); 
} 

bool init_8(MSTSCLib::IMsRdpClient8* iface) 
{ 
    iface->putSomeData2(); 
} 

bool init_7(MSTSCLib::IMsRdpClient7* iface) 
{ 
    iface->putSomeData1(); 
    iface->putSomeData3(); 
} 

我想知道是否有任何更好地落實到下面的原型,因爲每個語句需要接口指針的明確的鑄造,也Visual Studio的智能感知將很難獲取詳細信息。

bool init(void* ptriface, int version) 
{ 
    void* iface; // todo: make this type to required version 

    // Cast iface at run-time according to version number 
    // switch(version){} 
    iface = reinterpret_cast<MSTSCLib::IMsRdpClient9*>(ptriface); 
    iface = reinterpret_cast<MSTSCLib::IMsRdpClient8*>(ptriface); 
    iface = reinterpret_cast<MSTSCLib::IMsRdpClient7*>(ptriface); 

    // switch(version){} 
    iface->putSomeData1(); 
    iface->putSomeData2(); 
    iface->putSomeData3(); 
    iface->putSomeData4();  
} 
+1

模板功能可能? –

+0

每種類型的邏輯是不同的?也可以保持相同的功能,但過載 – AndyG

回答

1

好像你只是在尋找函數重載:

bool init(MSTSCLib::IMsRdpClient9*); 
bool init(MSTSCLib::IMsRdpClient8*); 
bool init(MSTSCLib::IMsRdpClient7*); 

bool init(MSTSCLib::IMsRdpClient9* iface) 
{ 
    iface->putSomeData1(); 
    iface->putSomeData2(); 
    iface->putSomeData3(); 
} 

// ...