Если у вас есть C ++ 17, вы можете написать:
template <class E>
bool job2(E* newData){
int something = 2;
if constexpr (std::is_same_v<E, DataType1>)
newData->x = something;
else
newData->a = something;
}
и полностью отказаться от i
(если вы использовали его только для различения типов).
В противном случаеЧто спорит против простой перегрузки вашей функции?
bool job2(DataType1* newData){
commonOperation();
newData->x = something;
}
bool job2(DataType2* newData){
commonOperation();
newData->a = something;
}
, где commonOperation
- это все, что имеют общие функции.