2016-09-22 8 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 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();  
} 
+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(); 
} 

// ... 

 Смежные вопросы

  • Нет связанных вопросов^_^