【问题标题】:Combining multiple functions to single generic function将多个函数组合成单个通用函数
【发布时间】:2025-12-12 23:00:02
【问题描述】:

我有几个函数来初始化接口指针,每个函数都为特定版本初始化指针。现在我必须将这些函数变成一个通用函数。

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

【问题讨论】:

  • 可能是模板函数?
  • 每种类型的逻辑都不一样?最好保持相同的功能,但有重载

标签: c++ code-readability


【解决方案1】:

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

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

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

// ...

【讨论】: