将多个函数组合为单个泛型函数

Combining multiple functions to single generic function

本文关键字:函数 单个 泛型 组合      更新时间:2023-10-16

我有两个函数来初始化接口指针,每个函数初始化特定版本的指针。现在我必须把这些函数变成一个泛型函数。

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 Intellisense将很难获取细节。

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

似乎你只是在寻找函数重载:

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