Я бы хотел сделать следующее:
const int someInt;
const std::vector<int> someIntList;
const std::vector<std::vector<int>> someNestedIntList;
Marshall(someInt); // trivial case
Marshall(someIntList); // difficult case
Marshall(someNestedIntList); // difficult case
Я попробовал следующее:
template<std::vector<class Element>>
void Marshall(const std::vector<Element>& toBeMarshalled)
{
for (int i=0; i<toBeMarshalled.size(); ++i)
Marshall<Element>(toBeMarshalled[i]);
}
К сожалению, это не компилируется, и мне не удалось найти правильный синтаксис для него.
Обратите внимание, что должен быть только один параметр шаблона, иначе сортировка вложенного списка не будет работать.
Обновление : Благодаря ответу FredOverflow я нашел то, что искал. Я забыл, что у всех контейнерных классов в стандартной библиотеке есть value_type typedef. Это может быть использовано в качестве обходного пути для моей проблемы:
template <class Container>
void Marshall(const Container& toBeMarshalled)
{
for (UINT32 i=0; i<toBeMarshalled.size(); ++i)
Marshall<Container::value_type>(toBeMarshalled);
}
Это немного патч, но я думаю, что он достаточно хорош.