Добрый день
Не очень удачное название топика, ну ладно. Есть либа которая юзается так (упрощенный псевдокод)
C++ (Qt)
template <class T>
void MyLib::Interpolate( const T * src, int numSrc, T * dst, int numDst, int channel);
Это работает, я могу вызывать метод с разными типами аргументов предварительно зарезервировав номер канала channel и узнав numDst. Неудобство в том что я "впадаю в if'ы" при разнородных данных. Напр
C++ (Qt)
// входные данные
std::vector <Color> srcColor;
std::vector <Coord> srcNormal;
std::vector <std::vector <Coord> > srcUV;
// выходные данные
std::vector <Color> dstColor;
std::vector <Coord3f> dstNormal;
std::vector <std::vector <CoordUV> > dstUV;
Любой входной контейнер может быть пустым - ну значит и соотв. выходной тоже пустой (этого канала нет)/ И начинается не очень красивое месиво с выяснением кто там есть, напр
C++ (Qt)
int channel = 0;
if (srcColor.size()) { // есть канал color
// создаем канал 0 и получаем числo выходных данных
...
dstColor.resize(numDst);
MyLib::Interpolate(&srcColor[0], srcColor.size(), &dstColor[0], numDst, channel++);
}
if (srcNormal.size()) { // есть канал normal
// создаем канал и получаем числo его выходных данных
...
dstNormal.resize(numDst);
MyLib::Interpolate(&srcNormal[0], srcNormal.size(), &dstNormal[0], numDst, channel++);
}
...
Подобным образом код неприятно дуплится еще в 2 местах. Хотелось бы как-то обобщить чтобы сделать все в 1 цикле, но как?
Спасибо