2016-09-22 8 views
0

私は、インターフェイスポインタを初期化するためにいくつかの関数を持ち、各関数は特定のバージョンのポインタを初期化します。今私はこれらの関数を単一の汎用関数にする必要があります。複数の関数を1つの汎用関数に結合する

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(); 
} 

// ... 
関連する問題