Объединение нескольких функций в одну общую функцию

У меня есть пара функций для инициализации указателя интерфейса и каждая функция инициализирует указатель для конкретной версии. Теперь я должен превратить эти функции в одну общую функцию.

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

Я хочу знать, есть ли какая-либо лучшая реализация ниже прототипа, потому что каждое утверждение потребовало бы явного приведения указателя интерфейса, а также визуальной студии 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();
}

0

Решение

Похоже, вы просто ищете перегрузку функций:

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

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

// ...
1

Другие решения

Других решений пока нет …